考虑我的情景,就像我有3张桌子一样 的表1, 的表2, table3 我想根据某些条件从table2或table3中获取一些colums
喜欢
select tb1.*,
if(tb1.status='true' then tb2.name else tb3.name)
from table1 tb1, table2 tb2, table3 tb3
where tb1.aid=tb2.aid and tb1.aid=tb2.aid
简而言之,我希望根据条件
显示table2或table3中的某些列答案 0 :(得分:1)
您可以使用CASE EXPRESSION
:
SELECT tb1.*,
CASE WHEN tb1.status = 'true' THEN tb2.name ELSE tb3.name END as `name`
FROM table1 tb1
INNER JOIN table2 tb2
ON(t1.aid = tb2.aid)
INNER JOIN table3 tb3
ON(tb1.aid = tb3.aid)
或者按照您想要的IF()
:
SELECT tb1.*,
IF(tb1.status='true' ,tb2.col1,tb3.col1) as col1,
IF(tb1.status='true' ,tb2.col2,tb3.col2) as col2,
IF(tb1.status='true' ,tb2.col3,tb3.col3) as col3
.....
此外,尽量避免使用隐式连接语法(逗号分隔)并使用正确的连接语法,这将帮助您避免错误,例如您所做的错误(将两个条件与tb2
进行比较而不是一到tb2
,一到tb3
答案 1 :(得分:1)
SELECT
tb1.*
, CASE
WHEN tb1.status = 'true' THEN tb2.name
ELSE tb3.name
END AS var_name
FROM table1 tb1
INNER JOIN table2 tb2 ON tb1.aid = tb2.aid
INNER JOIN table3 tb3 ON tb2.aid = tb3.aid
使用案例表达
但是,您还需要仔细研究如何加入表格。有两点需要注意:
答案 2 :(得分:1)
if(tb1.status ='true',tb2.name,tb3.name)as name