我目前有以下情况:
我正在尝试构建一个过滤器,我可以使用该过滤器选择具有一组给定属性的每一行。我将用一个例子解释这个:
SELECT table1.name FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.propertyID = "First PropertyID" AND table2.propertyID = "Second PropertyID"
显然,每次都返回null。但我无法弄清楚如何做到这一点..
表1有两列:ID和Name。 表2如下所示:
| ID | PropertyID |
| 1 | 3 |
| 1 | 5 |
| 1 | 7 |
| 2 | 6 |
| 2 | 1 |
我希望能够从表1中选择连接到例如表1的行。 PropertyID 3和5.
我找到了很多例子,但这些都是使用OR或IN,但我需要AND就是这种情况。
甚至可以使用MySQL,还是需要创建一些解决方法?
非常感谢任何帮助。
修改1:
表1如下所示:
| ID | Name |
| 1 | test |
| 2 | hello |
就我而言,我需要做更多LEFT JOINS才能到达table2,但我认为这个例子足以获得正确的方法。
答案 0 :(得分:3)
当外连接时,将外表条件移动到ON子句,否则外连接的行为就像内连接一样:
SELECT table1.name FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
AND table2.propertyID = "First PropertyID"
AND table2.property = "Second PropertyID"
答案 1 :(得分:2)
我建议你退后一步,在没有连接的情况下考虑这个问题。您想知道哪些行与属性3和5相关。您可以在没有这样的连接的情况下执行此操作:
SELECT tab1ID
FROM table2
WHERE propertyID = 3 OR propertyID = 5
GROUP BY tab1ID
HAVING COUNT(*) = 2;
要从表1中获取信息,您可以进行内部联接,以便只返回id 1:
SELECT t1.name
FROM table1 t1
JOIN table2 t2 ON t2.tab1ID = t1.id
WHERE t2.propertyid = 3 OR t2.propertyid = 5
GROUP BY t1.id
HAVING COUNT(*) = 2;
以下是SQL Fiddle示例。
答案 2 :(得分:0)
你的意思是这样的:
使用OR
代替AND
SELECT table1.name FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.propertyID = "First PropertyID"
OR table2.propertyID = "Second PropertyID"
或使用IN
SELECT table1.name FROM table1
LEFT JOIN table2 ON table1.ID = table2.ID
WHERE table2.propertyID IN( "First PropertyID","Second PropertyID")
但我想,你也需要Group By
功能。