我的代码会生成一个大型查询。
是一个简单的版本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
答案 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但没有来自其他表的其他数据的记录。