【发布时间】:2013-08-29 05:45:46
【问题描述】:
我有一个关于 SQL 连接的问题,它涉及第二个连接表中的多个条件。以下是表格详情
表 1
pId 状态 keyVal
---- -------- ------
100 1 45
101 1 46
表 2
pId 模式 modeVal
100 2 5
100 3 6
101 2 7
101 3 8
我有以上两个表,我正在尝试根据以下条件加入以获取 pId
keyVal = 45 和 status = 1 的 pId 与 mode = 2 和 modeVal 5 和 mode =3 和 modeVal = 6 的 table2 连接
我期望的结果是返回 pid = 100
你能帮我做一个连接查询吗?
【问题讨论】:
-
FROM table1 JOIN table2 on table1.pld = table2.pld WHERE table2.modeVal IN (5,6) AND table2.mode IN (2,3)我猜,连接条件只有pld,在你的 where 子句中你把另一个条件放在预期的结果中 -
它是否适用于 (mode=2 and modeValue=5) 和 (mode=3 and modeValue=6) 的特定组合?如果两个条件都满足并且成对 (2,5) 和 (3,6),则查询应返回 pId
-
一点也不,IN操作符就像OR操作符,只需要其中一个值就可以返回结果。在你的情况下,你可以使用你提到的东西
WHERE (mode=2 and modeValue=5) or (mode=3 and modeValue=6) -
您是要在至少这两个组合上匹配,还是完全这两个组合不匹配?
-
但是即使表 2 中的第 2 行不存在,这也会返回 pId = 100。我希望只有在表 2 中的第 1 行和第 2 行存在(AND 条件)时才返回 100。