2

我有一个关于 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

你能帮我查询一下吗?

4

3 回答 3

1

一种方法是使用GROUP BYwithHAVING来统计找到的行数为2,其中2个符合条件;

WITH cte AS (SELECT DISTINCT * FROM Table2)
SELECT t1."pId" 
FROM Table1 t1 JOIN cte t2 ON t1."pId" = t2."pId"
WHERE t1."status" = 1 AND t1."keyVal" = 45
GROUP BY t1."pId"
HAVING SUM(
  CASE WHEN t2."mode"=2 AND t2."modeVal"=5 OR t2."mode"=3 AND t2."modeVal"=6 
       THEN 1 END) = 2 AND COUNT(*)=2

如果 t2 中的值已经不同,您可以cte直接从 Table2 中删除并选择。

一个用于测试的 SQLfiddle

于 2013-08-29T08:08:45.977 回答
0

下面的查询应该完美地为你工作

select distinct table1.pid FROM table1 JOIN table2 
on table1.pid = table2.pid 
WHERE table2.modeValue IN (5,6) AND table2.mode IN (2,3) AND table1.keyVal=45 and table1.status=1;
于 2013-08-29T06:01:52.977 回答
0
SELECT columns
FROM table1 a, table2 B
WHERE a.pid = B.pid
    AND a.keyval = 45
    AND a.status = 1
    AND (
        (B.mode = 2 AND B.modeval = 5)
        OR 
        (B.mode = 3 AND B.modeval = 6)
    )
于 2013-08-29T05:54:05.537 回答