SQL 其中列不是一对多关系中的值
SQL where column is not value in a one to one of a one to many relation
我正在尝试编写一个 mysql 查询 select table 的所有行,其中一对一关系列是一对多关系的 0。基本上,我希望所有完成的线索都不是 1。
我的失败查询
SELECT * from `leads`
LEFT JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id`
LEFT JOIN `call_result_codes` ON `call_lead`.`call_result_code_id` = `call_result_codes`.`id`
AND `call_result_codes`.`finished` in (0) group by `leads`.`id`
这失败了,但仍然 returns 所有潜在客户,即使他们的代码已完成 1。
预期输出为
ID 为 12 的领导和 ID 为 2 的领导。
Table领先
_____________________
|id | name |
|2 | test name |
|8 | test name2 |
|12 | test name2 |
Table call_lead
_____________________________________________________
|id | lead_id | user_id | call_result_code_id |remark|
|22 | 8 | 1 | 0 |test |
|23 | 8 | 1 | 1 |test |
|24 | 2 | 1 | 0 |test |
Table call_result_codes
________________________________
|id | description | finished |
|0 | not answering | 0 |
|1 | not interested| 1 |
试试这个。
您在连接条件中有完成列。我把在哪里找到结果
SELECT * from `leads`
LEFT JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id`
LEFT JOIN `call_result_codes` ON `call_lead`.`call_result_code_id` = `call_result_codes`.`id`
WHERE `call_result_codes`.`finished` = 0
group by `leads`.`id`
您可以使用 EXISTS()
:
SELECT * FROM `leads`
LEFT OUTER JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id`
WHERE NOT EXISTS(SELECT 1 FROM `call_result_codes`
WHERE `call_lead`.`call_result_code_id` = `call_result_codes`.`id`
AND `call_result_codes`.`finished` = 1)
根据您的预期输出,我假设您也想要那些在 call_results_codes 中没有记录的人,所以他们没有 finished = 1.[=12 的记录就足够了=]
我正在尝试编写一个 mysql 查询 select table 的所有行,其中一对一关系列是一对多关系的 0。基本上,我希望所有完成的线索都不是 1。
我的失败查询
SELECT * from `leads`
LEFT JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id`
LEFT JOIN `call_result_codes` ON `call_lead`.`call_result_code_id` = `call_result_codes`.`id`
AND `call_result_codes`.`finished` in (0) group by `leads`.`id`
这失败了,但仍然 returns 所有潜在客户,即使他们的代码已完成 1。
预期输出为
ID 为 12 的领导和 ID 为 2 的领导。
Table领先
_____________________
|id | name |
|2 | test name |
|8 | test name2 |
|12 | test name2 |
Table call_lead
_____________________________________________________
|id | lead_id | user_id | call_result_code_id |remark|
|22 | 8 | 1 | 0 |test |
|23 | 8 | 1 | 1 |test |
|24 | 2 | 1 | 0 |test |
Table call_result_codes
________________________________
|id | description | finished |
|0 | not answering | 0 |
|1 | not interested| 1 |
试试这个。 您在连接条件中有完成列。我把在哪里找到结果
SELECT * from `leads`
LEFT JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id`
LEFT JOIN `call_result_codes` ON `call_lead`.`call_result_code_id` = `call_result_codes`.`id`
WHERE `call_result_codes`.`finished` = 0
group by `leads`.`id`
您可以使用 EXISTS()
:
SELECT * FROM `leads`
LEFT OUTER JOIN `call_lead` on `leads`.`id` = `call_lead`.`lead_id`
WHERE NOT EXISTS(SELECT 1 FROM `call_result_codes`
WHERE `call_lead`.`call_result_code_id` = `call_result_codes`.`id`
AND `call_result_codes`.`finished` = 1)
根据您的预期输出,我假设您也想要那些在 call_results_codes 中没有记录的人,所以他们没有 finished = 1.[=12 的记录就足够了=]