SQL - IF / ELSE逻辑取决于表列

时间:2016-06-12 22:32:36

标签: php mysql

所以,正如您可能已经猜到的那样,我正在编写一个查询来从数据库中选择数据。而且,正如您可能已经猜到的那样,我正在使用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'或者'团队'。

2 个答案:

答案 0 :(得分:1)

在连接条件中移动条件:

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')

答案 1 :(得分:1)

所以,我在我的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'