选择与另一列ID相同,但不同值的行和列指定值
我有这样的一个表:选择与另一列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。
你可以试试这个:
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;
问题标记为Oracle,尽管语法几乎与ANSI相同,但您的解决方案是MYSQL。但是,Oracle没有使用drop或create table语法的“if exists”命令。 – user75ponic
如果您想将子查询移到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;
我喜欢这个解决方案,但是仓库只存在于一张桌子上,而不是两个。将表格绑定在一起的唯一事情就是产品ID。任何建议知道额外的信息? –
请尝试此修订版本: http://rextester.com/RQDEL46288 – Jake
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
)
您应该编辑您的文章,包括一些样本数据和最终想要的结果,因为它不是真正清楚你的意思。 – ollie
已更新的问题 –