Mysql 如何使用SQL查询一对多关系?
我有两张桌子: A B 如何通过Sql查询仅获取表A中表B数量为2的行 预期结果是:Mysql 如何使用SQL查询一对多关系?,mysql,sql-server,Mysql,Sql Server,我有两张桌子: A B 如何通过Sql查询仅获取表A中表B数量为2的行 预期结果是: Aid: 1 Aid: 2 我试过这个: Select A.Aid FROM A INNER JOIN B ON A.Aid = B.Aid WHERE B.qty = 2 然而,这给了我比我需要的更多的结果: Aid: 1 Aid: 1 Aid: 2 Aid: 2 是的,我不在乎出价是多少。有什么想法吗 您需要按Aid Select A.Aid FROM A INNER JOIN B ON A.
Aid: 1
Aid: 2
我试过这个:
Select A.Aid FROM A INNER JOIN B ON A.Aid = B.Aid WHERE B.qty = 2
然而,这给了我比我需要的更多的结果:
Aid: 1
Aid: 1
Aid: 2
Aid: 2
是的,我不在乎出价是多少。有什么想法吗 您需要按
Aid
Select
A.Aid
FROM A
INNER JOIN B ON A.Aid = B.Aid
WHERE B.qty = 2
GROUP BY A.Aid
注意:按A.Aid分组
确保每个A.Aid
Select
A.Aid
FROM A
INNER JOIN B ON A.Aid = B.Aid
WHERE B.qty = 2
GROUP BY A.Aid
编辑:
使用不同的:
SELECT
DISTINCT A.Aid
FROM A
INNER JOIN B ON A.Aid = B.Aid
WHERE B.qty = 2
注意:DISTINCT
删除最终结果集中的重复行。您需要按Aid进行分组。
Select
A.Aid
FROM A
INNER JOIN B ON A.Aid = B.Aid
WHERE B.qty = 2
GROUP BY A.Aid
注意:按A.Aid分组
确保每个A.Aid
Select
A.Aid
FROM A
INNER JOIN B ON A.Aid = B.Aid
WHERE B.qty = 2
GROUP BY A.Aid
编辑:
使用不同的:
SELECT
DISTINCT A.Aid
FROM A
INNER JOIN B ON A.Aid = B.Aid
WHERE B.qty = 2
注意:DISTINCT
删除最终结果集中的重复行。一般来说,编写SQL查询的诀窍是想用英语做什么,然后尝试使用SQL关键字重写它
如果我将您的句子“仅获取表A中表B数量为2的行”再改写一点SQL-y,您可以说“仅选择表A中表B中存在数量为2的行作为辅助”
因此,您可以使用与EXISTS
相关的子查询:
select *
from A
where exists (
select 1
from B
where B.Aid = A.Aid
and B.qty = 2
)
一般来说,编写SQL查询的诀窍是想用英语做什么,然后尝试使用SQL关键字重写它
如果我将您的句子“仅获取表A中表B数量为2的行”再改写一点SQL-y,您可以说“仅选择表A中表B中存在数量为2的行作为辅助”
因此,您可以使用与EXISTS
相关的子查询:
select *
from A
where exists (
select 1
from B
where B.Aid = A.Aid
and B.qty = 2
)
请尝试:
Select Distinct A.Aid FROM A INNER JOIN B ON A.Aid = B.Aid WHERE B.qty = 2
请尝试:
Select Distinct A.Aid FROM A INNER JOIN B ON A.Aid = B.Aid WHERE B.qty = 2
使用SELECT DISTINCT
对结果集进行重复数据消除比使用GROUP BY
对聚合进行重复数据消除更合适。本例中的结果相同,但语义不同。@MichaelBerkowski您能使用SELECT DISTINCT帮助提供答案吗?非常感谢。是的,DISTINCT
更适合这里@MichaelBerkowski@Vicheanak您尝试的内部连接查询即将出现,只需添加关键字selectdistinct A.Aid….
,其他内容都是一样的。但这仅适用于从A
中仅检索一列的情况。如果您有其他列,并且不关心结果,那么可以使用相关子查询,也可以使用组aggregate@MichaelBerkowski我已经通过从tableA中检索两列进行了测试。如果我的表格A有另一列Aname,那么我可以添加SELECT DISTINCT A.Aid,A.Aname而不会出现任何问题。使用SELECT DISTINCT
来消除结果集的重复比使用GROUP BY
来处理聚合更合适。本例中的结果相同,但语义不同。@MichaelBerkowski您能使用SELECT DISTINCT帮助提供答案吗?非常感谢。是的,DISTINCT
更适合这里@MichaelBerkowski@Vicheanak您尝试的内部连接查询即将出现,只需添加关键字selectdistinct A.Aid….
,其他内容都是一样的。但这仅适用于从A
中仅检索一列的情况。如果您有其他列,并且不关心结果,那么可以使用相关子查询,也可以使用组aggregate@MichaelBerkowski我已经通过从tableA中检索两列进行了测试。如果我的表格有另一列Aname,那么我可以添加SELECT DISTINCT A.Aid,A.Aname,而不会出现任何问题。