gpt4 book ai didi

mysql - 使用 where 子句从 table1 中选择不在 table2 中的特定数据

转载 作者:搜寻专家 更新时间:2023-10-30 20:55:05 25 4
gpt4 key购买 nike

我想从 table1 中选择不在 table2 中的数据,但我必须从 table1 中选择特定数据

我的数据表

CREATE TABLE IF NOT EXISTS `table3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`acc_id` int(11) NOT NULL DEFAULT '0',
`did` int(11) NOT NULL,

PRIMARY KEY (`id`)
)



CREATE TABLE IF NOT EXISTS `table2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`acc_id` int(11) NOT NULL,
`table1_id` int(11) NOT NULL,
`did` int(11) NOT NULL,

PRIMARY KEY (`id`)
)


CREATE TABLE IF NOT EXISTS `table1` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`acc_id` int(11) NOT NULL DEFAULT '0',

`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)

)

我想做

select name,id from table1 where id !=(select table1_id from table2 join table3 on table2.acc_id=table3.acc_id where table2.did=4759505 and table2.acc_id=2)and table1.acc_id=2

如果子查询返回 1 行,上面的查询就可以正常工作,但如果子查询返回多行,则不行

谢谢

最佳答案

您可以将 != 更改为 not in:

select name, id
from table1
where id not in (select table1_id
from table2 join
table3
on table2.acc_id = table3.acc_id
where table2.did = 4759505 and table2.acc_id = 2
) and
table1.acc_id = 2;

注意:您还应该确保子查询中的 table1_id 永远不会是 NULLNOT IN 在这种情况下可能不直观。通常,我更喜欢 NOT EXISTS:

select name, id
from table1
where not exists (select table1_id
from table2 join
table3
on table2.acc_id = table3.acc_id
where table2.did = 4759505 and table2.acc_id = 2 and
table1_id = table1.id
) and
table1.acc_id = 2;

这样可以更直观地处理 NULL 值。

关于mysql - 使用 where 子句从 table1 中选择不在 table2 中的特定数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25218723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com