[英]select rows with same id but different value in other column and specify column values
我有一張這樣的桌子:
+------+------+
|Product|Warehouse|
+-------+------+
|1 |A |
+-------+------+
|2 |A |
+-------+------+
|3 |A |
+-------+------+
|1 |B |
+-------+------+
|2 |B |
+-------+------+
我想選擇在其他倉庫中出現多次的產品。
輸出應該是這樣的:
+------+------+
|Product|Warehouse|
+-------+------+
|1 |A |
+-------+------+
|1 |B |
+-------+------+
|2 |A |
+-------+------+
|2 |B |
+-------+------+
這使我有辦法:
SELECT *
FROM YourTable
WHERE Warehouse IN (
SELECT Warehouse
FROM YourTable
GROUP BY Warehouse
HAVING COUNT(*) > 1
)
但我也想為Warehouse指定一組值。 因此,我要做的是查看存在於多個倉庫中的產品,但我希望能夠指定要查看的倉庫。
我將使用Oracle SQL Developer。
您可以嘗試以下方法:
http://rextester.com/LQZJ62189
drop table if exists your_table;
create table your_table ( product int, warehouse varchar(1));
insert into your_table values
(1, 'A'),
(2, 'A'),
(3, 'A'),
(1, 'B'),
(2, 'B');
select * from your_table
where product in (
SELECT product
FROM your_table
GROUP BY product
HAVING count(warehouse) > 1)
order by product;
如果要將子查詢移動到JOIN子句,可以執行以下操作:
SELECT *
FROM your_table T1
INNER JOIN (SELECT Warehouse
FROM your_table2
GROUP BY Warehouse
HAVING COUNT(Product) > 1) T2
ON T1.Warehouse = T2.Warehouse;
select a.product,b.wharhouse from
(select * from warhose) a,
(select * from warhose) b
where a.product=b.product
and a.wharhouse <> b.wharhouse
order by a.product,a.wharhouse desc
我將自己與同一產品和不同倉庫的表一起加入,結果將是所有產品都存在於一個以上倉庫中。 如果此表中沒有產品和倉庫的重復項,則此代碼正確。
您自己的嘗試非常接近,但是它顯示出具有多個產品而不是另一種產品的倉庫。
因此:
SELECT *
FROM YourTable
WHERE Product IN (
SELECT Product
FROM YourTable
GROUP BY Product
HAVING COUNT(*) > 1
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.