我有三个表,Clients、Bills 和 BillsStates。我想总是得到客户,如果它有账单,只有可以修改的账单。我正在尝试这样的事情:
select * from Clients
left join Bills on Bills.IDClient = Clients.IDClient
left join BillsStates on BillsStates.IDBillState = Bills.IDState
and BillsStates.AllowModify = 1
问题是我得到了客户的所有账单,无论它们是否可以修改。
我试图以正确的方式加入,但在这种情况下我没有得到任何结果。
连接是否可能,或者我可能需要一些子查询?我更喜欢有连接的解决方案,但如果没有办法以这种方式做到这一点,我会接受另一个解决方案。
您的查询只是BillsStates.*
在BillsStates.AllowModify = 1
条件失败时替换为空值:
| IDClient | Name | IDClient | IDState | Name | IDBillState | AllowModify |
|----------|------|----------|---------|--------|-------------|-------------|
| 1 | John | 1 | 1 | Bill 1 | NULL | NULL |
| 1 | John | 1 | 2 | Bill 2 | 2 | 1 |
| 2 | Jane | NULL | NULL | NULL | NULL | NULL |
重新排列连接类型和条件以获得所需的结果:
SELECT *
FROM Clients
LEFT JOIN (Bills
INNER JOIN BillsStates ON BillsStates.IDBillState = Bills.IDState) ON Bills.IDClient = Clients.IDClient AND BillsStates.AllowModify = 1;
| IDClient | Name | IDClient | IDState | Name | IDBillState | AllowModify |
|----------|------|----------|---------|--------|-------------|-------------|
| 1 | John | 1 | 2 | Bill 2 | 2 | 1 |
| 2 | Jane | NULL | NULL | NULL | NULL | NULL |
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句