Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用SQL查询一对多关系?_Mysql_Sql Server - Fatal编程技术网

Mysql 如何使用SQL查询一对多关系?

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.

我有两张桌子:

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 = 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,而不会出现任何问题。