[英]What is the best way to construct a complex sql query in sqlite3
我有兩張桌子
用戶
+----+-------+--------------+-------------------------------+ | ID | Login | Password | Guid | +----+-------+--------------+-------------------------------+ | 1 | john | johnpassword | 8f6nf7-r73hd3-43nhd7-df74hd | | 2 | mary | marypassword | 4552mf-234jdf-43njduy-fwujd | | 3 | mark | markpassword | dfh32-fdwe34-3442dr-43wdj45 | | 4 | tom | tompassword | edri84-234jd-234jf-2345jd83 | +----+-------+--------------+-------------------------------+
往來
+----+---------------+------------------+---------+ | ID | RequestSender | RequestRecipient | Status | +----+---------------+------------------+---------+ | 1 | 1 | 2 | 3 | | 2 | 1 | 3 | 3 | | 3 | 4 | 1 | 3 | +----+---------------+------------------+---------+
RequestSender和RequestRecipient是“用戶”表中“ ID”的外鍵。 狀態可以是1(已請求),2(已拒絕)和3(已接受)
我想編寫一個查詢,通過僅提供他的guid從聯系人表中獲取所有約翰的聯系人,並得到這樣的結果
結果
+----+-------+-----------------------------+ | ID | Login | Guid | +----+-------+-----------------------------+ | 2 | mary | 4552mf-234jdf-43njduy-fwujd | | 3 | mark | dfh32-fdwe34-3442dr-43wdj45 | | 4 | tom | edri84-234jd-234jf-2345jd83 | +----+-------+-----------------------------+
請注意,只要Status為3(即有效的聯系關系),john的ID可以同時位於RequestSender或RequestRecipient上
我正在使用SQLITE3,所以無法在SQL Server上執行某些復雜的工作
根本沒有復雜的東西。 這是非常基本的SQL:
SELECT ID, Login, Guid FROM Users WHERE ID IN (
SELECT RequestSender FROM Contacts WHERE RequestRecipient=(
SELECT ID FROM Users WHERE Guid=?1
) UNION SELECT RequestRecipient FROM Contacts WHERE RequestSender=(
SELECT ID FROM Users WHERE Guid=?1
)
)
只需將?1
替換為所需的GUID。
編輯:更正的表名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.