簡體   English   中英

SQL查詢找到兩個表之間沒有關系

[英]Sql query to find the absence of a relationship between two tables

我正在嘗試編寫一個查詢,該查詢查找表C和表A之間不存在關系。唯一知道這種關系的表是表B。

|Table A|   |Table B|                     |Table C|
---------   ---------                     ---------
|id: 1  |   |id: 2, a_id: 1, c_id: 3|     |id: 3  |
|id: 4  |                                 |id: 5  |

對於與表A不相關的表C中的每個條目,我想知道這一點。

輸出示例:

|Output|
--------
|c_id: 3, a_id: 4|
|c_id: 5, a_id: 1|
|c_id: 5, a_id: 4|

希望你能遵循。 我一直在考慮,但沒有看到解決方案。

AC之間進行交叉連接,使用NOT EXISTS子句排除B找到的組合。

SELECT C.id AS c_id, A.id AS a_id
  FROM C, A
 WHERE NOT EXISTS ( SELECT * FROM B WHERE B.a_id = A.id AND B.c_id = C.id )

由於標記了sql-server ,因此還可以使用EXCEPT子句。

SELECT C.id AS c_id, A.id AS a_id FROM C, A
EXCEPT
SELECT c_id, a_id FROM B

第一個適用於所有SQL數據庫。 第二個僅適用於某些,例如

  • EXCEPT適用於MS SQL Server,PostgreSQL,DB2和SQLite。
  • MINUS為Oracle工作。
  • MySQL沒有該功能。

嘗試這個

SELECT C.id AS c_id, A.id AS a_id
FROM C cross join A left outer join b on B.a_id = A.id AND B.c_id = C.id
WHERE b.id is null

嘗試左連接查找空值

select A.id, C.id
from B left outer join A on A.id= B.a_id left outer join C on C.id = B.c_id
where B.a_id is null or B.c_id is null

這應該為您做。

SELECT c.id, a.id 
FROM c 
  JOIN a 
WHERE (SELECT id 
  FROM b 
  WHERE b.a_id = a.id AND 
    b.c_id = c.id) IS NULL
ORDER BY c.id, a.id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM