查询以从一个查询中的另一个 id 获取结果
Query to get result from another id in one query
我有以下简单的table
product_id vendor_id product_gtin product_parent_id
646 1 123456789 0
4502 2 202020255 646
因此,我想从 product_parent
获取 id 4502 的产品 gtin
结果示例:
product_id vendor_id product_gtin product_parent_id
646 1 123456789 0
4502 2 123456789 646
.
SELECT product_id, vendor_id, case when vendor_id !=1 then (select product_gtin from `products` where product_id = product_parent_id) else product_gtin end as gtin, product_parent_id FROM `products` where product_id in (646, 4502)
我的问题是,当我 运行 查询时,它不知道我指的是哪个 ID。所以我得到 NULL 作为 product_gtin for id 4502.
的结果
如有任何解决方法的建议,我们将不胜感激
您可以使用 table 别名:
select product_id, vendor_id,
case when vendor_id <> 1
then (select product_gtin from `products` p1 where p1.product_id = p.product_parent_id)
else product_gtin
end as gtin,
product_parent_id
from `products` p
where product_id in (646, 4502)
您应该使用 self left join
而不是具有适当别名的子查询来引用列,因为我们使用相同的 table 两次。
select p.product_id,
p.vendor_id,
case when p.vendor_id != 1 then p1.product_gtin else p.product_gtin end as gtin,
p.product_parent_id
from `products` p lefr join `products` p1 on p1.product_id = p.product_parent_id
where p.product_id in (646, 4502)
我有以下简单的table
product_id vendor_id product_gtin product_parent_id
646 1 123456789 0
4502 2 202020255 646
因此,我想从 product_parent
获取 id 4502 的产品 gtin结果示例:
product_id vendor_id product_gtin product_parent_id
646 1 123456789 0
4502 2 123456789 646
.
SELECT product_id, vendor_id, case when vendor_id !=1 then (select product_gtin from `products` where product_id = product_parent_id) else product_gtin end as gtin, product_parent_id FROM `products` where product_id in (646, 4502)
我的问题是,当我 运行 查询时,它不知道我指的是哪个 ID。所以我得到 NULL 作为 product_gtin for id 4502.
的结果如有任何解决方法的建议,我们将不胜感激
您可以使用 table 别名:
select product_id, vendor_id,
case when vendor_id <> 1
then (select product_gtin from `products` p1 where p1.product_id = p.product_parent_id)
else product_gtin
end as gtin,
product_parent_id
from `products` p
where product_id in (646, 4502)
您应该使用 self left join
而不是具有适当别名的子查询来引用列,因为我们使用相同的 table 两次。
select p.product_id,
p.vendor_id,
case when p.vendor_id != 1 then p1.product_gtin else p.product_gtin end as gtin,
p.product_parent_id
from `products` p lefr join `products` p1 on p1.product_id = p.product_parent_id
where p.product_id in (646, 4502)