![](/img/trans.png)
[英]SQL Query - select all from one table with matching records in another
[英]How to select all data from one table and records from another table matching data in first selection. All in one query
我有兩個表Messages
和Files
。 Files
表通過其message_id
外鍵引用Messages
,該外鍵也對應於Messages
的名為message_id
的主鍵。 消息實體可能有也可能沒有文件,但沒有消息就不可能有文件。
所以我想 select 一次查詢中的所有內容。 所有的消息,如果有消息的文件,那么 select 也是一個文件。 據我了解,生成的查詢應如下所示:
select * from Messages union select * from Files where message_id = Messages.message_id
不幸的是,這個簡單的查詢無效。 我也試過使用連接:
select * from Messages
left outer join Files on Messages.message_id = Files.message_id
union
select * from Files
left outer join Messages on Messages.message_id = Files.message_id
但它只給我那些有文件的消息。 使用子查詢似乎不是解決方案。 那么我該怎么做呢?
你想要一個完整的外部連接,SQLite 不直接支持。 您可以按照您已經嘗試過的方式使用聯合來模擬它:
SELECT m.*, f.*
FROM Messages m
LEFT JOIN Files f ON m.message_id = f.message_id
UNION ALL
SELECT m.*, f.*
FROM Files f
LEFT JOIN Messages m ON m.message_id = f.message_id
WHERE m.message_id IS NULL;
您的要求的關鍵點是:
消息實體可能有也可能沒有文件,但沒有消息就不可能有文件
這是Messages
to Files
的LEFT
join 的定義:
SELECT *
FROM Messages m LEFT JOIN Files f
ON f.message_id = m.message_id;
如果您想要一個表中的數據,如果它存在,另一個表中的數據那么為什么簡單的左外連接不起作用?
select * from Messages
left outer join Files on
Messages.message_id = Files.message_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.