0
我需要从mysql数据库中检索行,如下所示:我有一个合同表,一个合同行项目表和另一个名为udac的表。根据合同订单项与udac之间的关系,我需要所有没有订单项记录的合同。如果有更好的方式来陈述这个问题,让我知道。选择相关记录不存在的行
表结构
----contract--------------------- ---contractlineitem-----------
| id | customer_id | entry_date | | id | contract_id | udac_id |
--------------------------------- ------------------------------
| 1 | 1234 | 2010-01-01 | | 1 | 1 | 5 |
| 2 | 2345 | 2016-01-31 | | 2 | 1 | 2 |
--------------------------------- | 3 | 1 | 1 |
| 4 | 2 | 4 |
| 5 | 2 | 2 |
------------------------------
---udac----------
| id | udaccode |
-----------------
| 1 | SWBL/R |
| 2 | SWBL |
| 3 | ABL/R |
| 4 | ABL |
| 5 | XRS/F |
-----------------
鉴于上述数据,合同2会出现,但合同1不会,因为它有指向在/ F或/ R结束udacs contractlineitems。
这是我到目前为止,但它是不正确的。
SELECT c.*
FROM contract c
JOIN contractlineitem cli
ON c.id = cli.contract_id
WHERE c.entry_timestamp > '2016-01-01 00:00:00'
AND NOT EXISTS (
SELECT cli.id
FROM contractlineitem cli_i
JOIN udac u
ON cli_i.udac_id = u.id
WHERE u.udaccode LIKE '%/F' OR u.udaccode LIKE '%/R'
AND cli_i.contract_id = cli.contract_id);
表结构,示例数据,预期输出... http://stackoverflow.com/help/how-to-ask –
@TomH修改后的问题。那个更好吗? – lmerry213
你需要在你的'OR'逻辑中放置圆括号,否则'AND'逻辑不会产生变化。操作顺序。 –