簡體   English   中英

選擇其他列中具有相同ID但值不同的行並指定列值

[英]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;

http://rextester.com/SRL27676

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM