簡體   English   中英

SQL-IF / ELSE邏輯取決於表列

[英]SQL - IF/ELSE Logic depending on table column

因此,您可能已經猜到了,我正在編寫一個查詢以從數據庫中選擇數據。 而且,正如您可能已經猜到的那樣,我正在使用If / Else語句的邏輯來編寫它。 顯然,這在SQL中並不像我們所有人希望的那么簡單。 簡而言之,下面是某種偽代碼版本:

SELECT * FROM table1 INNER JOIN table2 on col2 = col1
// Some other JOINS and irrelevant data stuff
if (table2.conditionalColumn == 'x') {
    JOIN table3 ON col3 = col2 WHERE a = 1, b = 2, c = 3
} else {
    JOIN table3 ON col3 = col2 JOIN table4 ON col4 = col3
}

我了解上述查詢絲毫不類似於適當的SQL查詢。 我試圖找出的是如何解決一列的問題,該列的值確定是聯接到一個表還是聯接到另一個表。 整個概念類似於社交網絡的“朋友之友”系統。

如果需要,請隨時要求對該問題進行任何進一步的解釋。 我曾嘗試使用某些OR邏輯,但完全陷入困境。 我該如何解決這個問題?

謝謝!

編輯-為了更容易理解我的目標,我在下面添加了一個方案:

我想從表中選擇指定的數據projects ,如果用戶有內部的排projects_members表,或者他們有一個排在了teams的表,和團隊內部的排projects_members projects_members內部有一列名為memberType的列,該列設置為'user'或'team'。

在連接條件內移動條件:

SELECT * FROM table1 INNER JOIN table2 on col2 = col1
X JOIN table3 t3 ON (col3 = col2 and table2.conditionalColumn = 'x'  
and a = 1 and b = 2 and c = 3) 
X JOIN table3 t32 ON (col3 = col2 and table2.conditionalColumn <> 'x')
X JOIN table4 t4 ON (col4 = col3 and table2.conditionalColumn <> 'x')

因此,我在phpMyAdmin查詢生成器中擺弄了一下,找到了解決該問題的方法。 這是針對該問題的方案風格的解決方案查詢:

SELECT
    *
FROM
    users_data t1
INNER JOIN
    teams_members t2 ON t2.memberId = t1.userId
LEFT JOIN
    projects_members p1 ON (
        p1.memberType = 'team' AND p1.memberId = t2.teamId
    )
LEFT JOIN
    projects_members p2 ON (
        p2.memberType = 'user' AND p2.memberType = t1.userId
    )
WHERE
    t1.userName = 'foo'

暫無
暫無

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

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