Mysql 从两个表中选择,如果不存在,则插入其中一个表
我有三张桌子:Mysql 从两个表中选择,如果不存在,则插入其中一个表,mysql,sql,Mysql,Sql,我有三张桌子: Members - Person_id Sites - Site_id Member_multi_site - Person_id - Site_id 我试图做的是在Member\u multi\u Site表中不存在同一行时,将Person\u id和Site\u id插入Member\u multi\u Site表 因此,如果站点表中有3行1、2、3,而成员表中有1行1,则应将它们像这样添加到成员多站点表中: 我通过手动插入站点id使其正常工作,如下所示: 我不知道
Members
- Person_id
Sites
- Site_id
Member_multi_site
- Person_id
- Site_id
我试图做的是在Member\u multi\u Site表中不存在同一行时,将Person\u id和Site\u id插入Member\u multi\u Site表
因此,如果站点表中有3行1、2、3,而成员表中有1行1,则应将它们像这样添加到成员多站点表中:
我通过手动插入站点id使其正常工作,如下所示:
我不知道如何更改此查询,因此不必手动输入站点id。如果表不存在,可以交叉连接表并插入行
INSERT INTO
Member_multi_site (
Person_id,
Site_id
)
SELECT
Person_id,
Site_id
FROM
Members
CROSS JOIN Sites
WHERE Person_id NOT IN (SELECT Person_id FROM Member_multi_site)
AND Site_id NOT IN (SELECT Site_id FROM Member_multi_site)
或者您可以使用“不存在”
如果行不存在,可以交叉连接表并插入行
INSERT INTO
Member_multi_site (
Person_id,
Site_id
)
SELECT
Person_id,
Site_id
FROM
Members
CROSS JOIN Sites
WHERE Person_id NOT IN (SELECT Person_id FROM Member_multi_site)
AND Site_id NOT IN (SELECT Site_id FROM Member_multi_site)
或者您可以使用“不存在”
请在测试环境中检查以下SQL脚本 我希望有帮助
insert into Member_multi_site (
Person_id, Site_id
)
select
t.Person_id, t.Site_id
from (
select Person_id, Site_id from Members, Sites
) t
left join Member_multi_site m
on m.Person_id = t.Person_id and
m.Site_id = t.Site_id
where m.Site_id is null
请在测试环境中检查以下SQL脚本 我希望有帮助
insert into Member_multi_site (
Person_id, Site_id
)
select
t.Person_id, t.Site_id
from (
select Person_id, Site_id from Members, Sites
) t
left join Member_multi_site m
on m.Person_id = t.Person_id and
m.Site_id = t.Site_id
where m.Site_id is null
你的错误是什么?插入的最后一列后面有一个逗号?是的,从性能角度来看,您的两个查询似乎都比Eraper的答案慢了一点,并且在服务器上使用了更多的操作,但是您的查询的可读性要好得多。另一个注记。第一次运行后的第一次查询,如果尝试从Member_multi_site表中删除几行并再次执行,则不会填充已删除的行。您的第二个查询正确地执行了该操作。您得到的错误是什么?插入的最后一列后面有一个逗号?是的,从性能角度来看,您的两个查询似乎都比Eraper的答案慢了一点,并且在服务器上使用了更多的操作,但是您的查询的可读性要好得多。另一个注记。第一次运行后的第一次查询,如果尝试从Member_multi_site表中删除几行并再次执行,则不会填充已删除的行。您的第二个查询正确地执行了该操作。感谢您的查询,但是它不会检查表成员\u multi\u siteHello中是否已存在该行,左侧的“连接到成员\u multi\u site”和WHERE子句将检查成员\u multi\u site行并删除要再次插入的现有行。请再测试一次。我尝试了不同的情况,每次都得到了想要的结果。如果我运行两次查询,它将插入两次数据。已对此进行测试。请检查WHERE子句,其中m.Site_id为null。别名或列名是否为false?您可能可以使用这些工具。感谢您的查询,但是它不会检查表成员\u multi\u siteHello中是否已经存在该行,左侧的“连接到成员\u multi\u site”和WHERE子句将检查成员\u multi\u site行并删除要再次插入的现有行。请再测试一次。我尝试了不同的情况,每次都得到了想要的结果。如果我运行两次查询,它将插入两次数据。已对此进行测试。请检查WHERE子句,其中m.Site_id为null。别名或列名是否为false?也许你可以玩这些。
insert into Member_multi_site (
Person_id, Site_id
)
select
t.Person_id, t.Site_id
from (
select Person_id, Site_id from Members, Sites
) t
left join Member_multi_site m
on m.Person_id = t.Person_id and
m.Site_id = t.Site_id
where m.Site_id is null