是否可以在不破坏行的情况下使用LEFT JOIN中的var进行JOIN操作?

时间:2010-01-28 12:54:15

标签: tsql sqlite

我的代码会生成一个大型查询。

是一个简单的版本
SELECT * FROM main_table as mt
JOIN user_data AS ud ON mt.user_id=ud.id 
LEFT JOIN ban_Status AS bs ON  ud.status_id=bs.id
JOIN AnotherTable ON bs.data=AnotherTable.id

注意:此代码未经测试。

当我删除最后一个联接时,我得到结果。我也可以将它更改为左连接,但这是错误的。如果ud.status不为null,我想要一个连接,就像我从ban_Status执行select查询时一样。我该如何解决?如果我离开加入父表,我必须在每个表上写左连接吗?那不会给我带来副作用吗?

我正在使用sqlite ATM,但会切换到tsql

1 个答案:

答案 0 :(得分:3)

使用LEFT JOIN,但在WHERE子句中指定ud.status_id为null且AnotherTable.id为null或两者均为null。

SELECT * FROM main_table as mt
JOIN user_data AS ud ON mt.user_id=ud.id 
LEFT JOIN ban_Status AS bs ON  ud.status_id=bs.id
LEFT JOIN AnotherTable ON bs.data=AnotherTable.id
WHERE (ud.status_id is null and AnotherTable.id is null)
       or (ui.status_id is not null and AnotherTable.id is not null)

这将使您无法选择任何具有ban_Status但没有来自其他表的其他数据的记录。