那是我的数据库架构
我需要查看tab3中的值,并从tab2查看sortId和id。所以我创建了查询:
SELECT * FROM test.tab3 where idTab2 = 1 and sortId = 1;
没关系。
现在我有一个任务:来自tab1的id并显示来自tab3的值。因为tab1和tab2有一对多关系,所以我做了类似的事情:
SELECT * FROM test.tab3 where idTab2 = (select id from test.tab2 where idTab1 = 1);
现在是我的问题。如何创建查询或者做其他事情来创建像这样的伪代码:
ids =从test.tab2中选择id,其中idTab1 = 1 select * from tab.test3其中idTab2 = ids [0]和ids 1
答案 0 :(得分:2)
将其用作:
SELECT * FROM test.tab3 where idTab2 IN (select id from test.tab2 where idTab1 = 1);
了解MySQL IN子句see it
答案 1 :(得分:2)
如果子选择可以返回多行,请改为使用EXISTS
:
SELECT *
FROM test.tab3 t3
WHERE EXISTS (
SELECT *
FROM test.tab2 t2
WHERE t2.idTab1 = 1 AND t3.idTab2 = t2.id
) -- ^^^^^^^^^^^^^^^^^^^^^
idTab2 = SELECT id ...
的比较已移至嵌套WHERE
的{{1}}子句中。
答案 2 :(得分:2)
如果我理解得很好,你想得到tab3中与tab1到tab2相关的所有行,不是吗?然后,您需要在三个表之间使用 join :
SELECT tab3.* FROM tab3
INNER JOIN tab2 ON tab3.idTab2=tab2.id
INNER JOIN tab1 ON tab2.idTab1=tab1.id
WHERE tab1.id=<your parameter>;
如果您不需要访问id
以外的tab1中的任何列,您可以让tab1
设置加入:
SELECT tab3.* FROM tab3
INNER JOIN tab2 ON tab3.idTab2=tab2.id
WHERE tab2.idTab1=<your parameter>;
答案 3 :(得分:1)
使用MySQL时,您可以在(子)查询结束时使用LIMIT子句。这会将结果集限制为给定的数字。不过要小心。由于可能没有明确的结果顺序,在您的案例中选择第一个结果,结果我不是确定性的。