MYSQL WHERE条件中的多个ID检查

3

我是一名有用的助手,可以为您翻译文本。

我有一个问题,我需要在WHERE子句中匹配所有ID才能获取一行数据。

以下是查询语句:

SELECT CompanyId
FROM vendors
WHERE VendorId
IN (
'306145244', '1011073437'
)

我想要所有既拥有 vendorId '306145244' 和 '1011073437' 的 CompanyId

如果其中一个 VendorId 匹配,我就不需要那个 companyId。两个 VendorId 都必须匹配。

在分组时,我需要像下面这样的 2 行:

company Id   Vendor Id
1             306145244
1             1011073437
2             306145244
2             306145244

如果可能的话,我希望这个查询在 ORACLE 中实现。

VendorId = '306145244' 和 VendorId = '1011073437'?请提供表结构! - AllTooSir
我假设有两行数据具有相同的公司ID但不同的供应商ID? - Osiris
供应商编号(VendorId)是否是多值的(以逗号分隔的值)? - Suhel Meman
5个回答

2
SELECT  CompanyId
FROM    vendors
WHERE   VendorId IN ('306145244', '1011073437')
GROUP   BY CompanyId
HAVING  COUNT(*) = 2

其他链接:


如果在每个CompanyIdvendorID不是唯一的,则需要使用DISTINCT关键字仅计算唯一值。

SELECT  CompanyId
FROM    vendors
WHERE   VendorId IN ('306145244', '1011073437')
GROUP   BY CompanyId
HAVING  COUNT(DISTINCT VendorId) = 2

我已经编辑了问题,请检查一下。你的查询只会给出一个供应商的行。我需要两行,分别对应('306145244', '1011073437')。 - Sahal

0

0
SELECT `CompanyId` , count( `CompanyId` )
FROM `vendors`
WHERE VendorId
IN (
'306145244', '1011073437'
)
GROUP BY `CompanyId`
HAVING count( `CompanyId` ) = 2;

使用这个,这对我起作用并经过测试。


我已经编辑了问题,请检查。您的查询将为供应商提供仅一行结果。我需要两行结果,分别是('306145244', '1011073437')。 - Sahal
在这种情况下,我只会得到一条公司记录,但我需要两条记录,请参见问题。 - Sahal

0
在SQL Server中,我们可以做的是:
SELECT CompanyId
FROM vendors
WHERE VendorId
IN ('306145244')
intersect
SELECT CompanyId
FROM vendors
WHERE VendorId
IN ('1011073437')

但是MYSQL不支持intersect。因此,我们必须采用MYSQL中intersect的替代方法

select distinct CompanyId
FROM vendors
where vendorId IN ('306145244')
and CompanyId IN
(SELECT CompanyId
FROM vendors
WHERE VendorId
IN ('1011073437'))

编辑

select  CompanyId,VendorId
FROM vendors
where vendorId IN ('306145244')
and CompanyId IN
(SELECT CompanyId
FROM vendors
WHERE VendorId
IN ('1011073437'))
union
select  CompanyId,VendorId
FROM vendors
where vendorId IN ('1011073437')
and CompanyId IN
(SELECT CompanyId
FROM vendors
WHERE VendorId
IN ('306145244'))

SQL Fiddle

的中文译文为:

{{链接1:SQL Fiddle}}


我已经编辑了问题,请检查一下。你的查询只会给出一个供应商的行。我需要两行,分别对应('306145244', '1011073437')。 - Sahal
@Sahal 回答已编辑。:)。它也适用于 Oracle - Prahalad Gaggar

0

试试这个:

SELECT CompanyId,VendorId
FROM vendors
WHERE VendorId
IN (
select VendorId from vendors
)
order by CompanyId asc;

希望这能对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接