2017-05-05 227 views
0

我有这样的一个表:选择与另一列ID相同,但不同值的行和列指定值

+------+------+ 
|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 
) 

但我也想指定一组用于仓库的值。所以我想要做的是查看存在于多个仓库中的产品,但我希望能够指定我想要查看的仓库。

我将使用Oracle SQL Developer。

+2

您应该编辑您的文章,包括一些样本数据和最终想要的结果,因为它不是真正清楚你的意思。 – ollie

+0

已更新的问题 –

回答

0

你可以试试这个:

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; 
+0

问题标记为Oracle,尽管语法几乎与ANSI相同,但您的解决方案是MYSQL。但是,Oracle没有使用drop或create table语法的“if exists”命令。 – user75ponic

0

如果您想将子查询移到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

+0

我喜欢这个解决方案,但是仓库只存在于一张桌子上,而不是两个。将表格绑定在一起的唯一事情就是产品ID。任何建议知道额外的信息? –

+0

请尝试此修订版本: http://rextester.com/RQDEL46288 – Jake

0
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 

我将自己加入到同一产品和不同的仓库中,结果将是存在于多个仓库中的所有产品。如果产品和仓库在此表中没有重复,则此代码是正确的。

+0

您还可以编写:select a.product,b.wharhouse而不是a.product,b.wharhouse – Shahram

+0

**从审核队列**:可以我请求你请在你的答案中添加更多的上下文。仅有代码的答案很难理解。如果您可以在帖子中添加更多信息,它可以帮助提问者和未来的读者。 – RBT

+0

我加入了同一个产品和不同的仓库的表格,其结果将是所有存在于多个仓库中的产品。 如果此表中没有重复的产品和仓库,则此代码正确。 – Shahram

0

你自己的尝试是非常接近,但它显示仓库与多个产品,而不是其他方式。

因此:

SELECT * 
    FROM YourTable 
    WHERE Product IN (
    SELECT Product 
     FROM YourTable 
     GROUP BY Product 
     HAVING COUNT(*) > 1 
    ) 
相关问题