簡體   English   中英

select 如何將一張表中的所有數據與另一張表中的記錄匹配,先選數據。 全部在一個查詢中

[英]How to select all data from one table and records from another table matching data in first selection. All in one query

我有兩個表MessagesFiles 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 FilesLEFT 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.

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