簡體   English   中英

在sqlite3中構造復雜的SQL查詢的最佳方法是什么

[英]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.

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