2013-04-25 61 views
2

我有一個查詢,我需要得到只有在WHERE子句多ID檢查WHERE條件

下面是該查詢

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

的所有ID匹配我希望有一個行的所有CompanyId其中有vendorId'306145244'和'1011073437'

如果其中一個VendorId匹配,我不想那companyId。雙方應VENDORID分組時我需要2行類似下面

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

如果可能,我希望在這ORACLE查詢匹配

+0

VendorId ='306145244'and VendorId ='1011073437'?表結構請! – NINCOMPOOP 2013-04-25 05:44:27

+0

我假設有2行具有相同的companyID和不同的vendorID? VendorId是多值(逗號分隔值)嗎? – Osiris 2013-04-25 05:44:38

+0

是VendorId是多值(逗號分隔值)? – 2013-04-25 05:45:25

回答

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

OTHER LINK:


如果vendorID不是每個CompanyId獨特,一DISTINCT關鍵字是需要計數唯一的值,

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

我編輯了這個問題。請檢查一下。您的查詢將僅爲供應商提供一行。我需要2行('306145244','1011073437') – Sahal 2013-04-25 06:40:37

+0

@Shahal看到這裏':)'http://www.sqlfiddle.com/#!2/34634/8 – 2013-04-25 06:45:09

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

用這個,這是爲我工作和測試。

+0

我編輯了這個問題。請檢查一下。您的查詢將僅爲供應商提供一行。我需要2行('306145244','1011073437') – Sahal 2013-04-25 06:41:03

+0

在這種情況下,我將只獲得一條公司記錄,我需要2條記錄查看問題 – Sahal 2013-04-25 06:51:27

0

SQL Server我們可以做的是:

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

MYSQL不支持intersect。因此,我們必須接近alternative to intersect in MYSQL

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

+0

我編輯了這個問題。請檢查一下。您的查詢將僅爲供應商提供一行。我需要2行('306145244','1011073437') – Sahal 2013-04-25 06:41:19

+0

@Sahal答覆編輯。 **:)**。它也將在** Oracle **中起作用 – Luv 2013-04-25 06:49:05

0

試試這個:

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

希望它能幫助你。