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

时间:2013-12-13 21:39:33

标签: php mysql sql

之前可能已经提出过这个问题,但我真的不知道要搜索哪些措辞。

我有一个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 */
}

2 个答案:

答案 0 :(得分:1)

您可以自行加入表格:

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'

答案 1 :(得分:0)

你在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'在最后一行)