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