SQL查询:我需要两个查询还是可以使用嵌套子查询


SQL Query: do I need two queries or can I use a nested subquery

这个问题以前可能被问过,但我真的不知道用什么措辞来搜索。

我有一个mysql数据库,它有一个包含3列[ID,fieldName和fieldValue]的表,用于描述另一个表中对象的属性。ID字段存储另一个表中对象的外键,fieldName和fieldValue存储标题、描述、文件大小和摘要等内容。

我正在尝试编写一个查询,返回fieldName和fieldValue对与已知值匹配的行,并且返回的行ID在另一行中有另一个不同的fieldValue。现在我用两个查询和一个if语句来完成它。这是sudo代码:

$result = SELECT * FROM table_a WHERE fieldName = 'title' and fieldValue = 'someTitle'
$test = SELECT * FROM table_a WHERE fieldValue = 'someValue' and id = '{$result['id']}'
if ($test) {
  /* Result Found */
}

您可以自加入表:

SELECT * FROM table_a AS s1 
JOIN table_a AS s2 USING (id)
WHERE
    s1.fieldName = 'Title' AND s1.fieldValue = 'someTitle'
    AND s2.fieldValue = 'someValue'

您所说的在sql中翻译的内容是:

SELECT b.* 
FROM table_a a
INNER JOIN table_a b ON a.id = b.id
WHERE a.fieldName = 'title'
  AND a.fieldValue = 'someTitle'
  AND a.fieldValue <> b.fieldValue

这将获得table_a中的行,这些行与具有预定义值的行具有相同的id,但具有不同的fieldValue。这假设id不是主键,否则就不会有另一行具有相同的id,但在您的问题中,情况并非如此。(如果您想检查一个特定的值,您可以执行:最后一行中的AND b.fieldValue = 'someValue'