如何选择ColumnX = 1但≠2的行?

时间:2013-12-16 18:59:50

标签: mysql

我必须完成的任务是:选择Titre哪个NumCritere等于1但不等于2。

有两个表:Biens [ RefBien, Titre ],例如:

RefBien 1       Titre 1 ,                       
RefBien 2       Titre 2 ,                        
RefBien 3       Titre 3 ,

EvaluationsBiens [ NumCritere#, RefBien# ],例如:

Num 1           Refbien 1,
Num 1           Refbien 2,
Num 1           Refbien 3,
Num 2           Refbien 1,
Num 2           Refbien 3,
NUM 3           Refbien 1,

我试过了:

SELECT NumCritere, Titre
FROM evaluationsbiens
JOIN biens ON evaluationsbiens.RefBien = biens.RefBien
where NumCritere ="1"
and NumCritere<>"2";

我得到titre行的所有NumCritere=1行。

你能告诉我我的代码有什么问题吗?或者你有一种不同的方式来做它?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望返回与Titre为1的任何记录相关联的NumCritere,但如果它还与NumCritere的记录相关联,则返回

在这种情况下,这应该有效:

SELECT Titre
FROM evaluationsbiens
JOIN biens ON evaluationsbiens.RefBien = biens.RefBien
WHERE NumCritere = 1
AND evaluationsbiens.RefBien NOT IN (SELECT RefBien FROM evaluationsbiens WHERE NumCritere = 2)

示例SQL Fiddle

答案 1 :(得分:0)

您可以两次加入桌子。一次加入1,然后将加入保留为2,并将结果限制为左连接的不匹配。

SELECT *
FROM biens
JOIN evaluationsbiens as e1 ON biens.RefBien = e1.RefBien AND e1.numCritere = 1
LEFT JOIN evaluationsbiens as e2 ON biens.RefBien = e2.RefBien and e2.numCritere = 2
WHERE e2.RefBien is NULL;