Mysql 如果满足条件,请选择一列

Mysql 如果满足条件,请选择一列,mysql,Mysql,我在MySQL中从几个表(在WordPress/WooCommerce中)创建了一个视图,最终结果如下所示: id name price sku 1 test 9.99 ABC 数据来源表的设置如下所示: id name price sku 1 test 9.99 ABC 产品表 元数据表 我遇到的问题是如何使meta_键在最终视图表中显示为列 这就是我目前所拥有的(它不起作用,但可能有助于显示我想要使用的逻辑,请参

我在MySQL中从几个表(在WordPress/WooCommerce中)创建了一个视图,最终结果如下所示:

id    name    price   sku 
1     test    9.99    ABC
数据来源表的设置如下所示:

id    name    price   sku 
1     test    9.99    ABC
产品表

元数据表

我遇到的问题是如何使meta_键在最终视图表中显示为列

这就是我目前所拥有的(它不起作用,但可能有助于显示我想要使用的逻辑,请参见下面的第3-4行):


您需要向联接中添加附加条件以过滤meta_键,并对要生成列的每种类型的键进行联接:

SELECT 
  products.id,
  products.name,
  price.value AS price
  sku.value AS sku
FROM `products`
INNER JOIN `metadata` AS price ON products.id = price.product_id AND price.meta_key = 'price'
INNER JOIN `metadata` AS sku ON products.id = sku.product_id AND sku.meta_key = 'sku'
请注意,这将只显示元数据表中同时包含价格和sku的产品。
如果要显示具有或的产品,请将
内部连接更改为
左连接。。价格和sku真的是表吗?我不知道我们可以引用这样一个字段的值。不,在本例中,它们是元数据表的别名,在jointhis上指定。这很好。sql荣耀的新领域在我脑海中打开。
SELECT 
  products.id,
  products.name,
  metadata.value AS price IF meta_key = price
  metadata.value AS sku IF meta_key = sku
FROM `products`
INNER JOIN `metadata`
ON products.id = metadata.product_id
SELECT 
  products.id,
  products.name,
  price.value AS price
  sku.value AS sku
FROM `products`
INNER JOIN `metadata` AS price ON products.id = price.product_id AND price.meta_key = 'price'
INNER JOIN `metadata` AS sku ON products.id = sku.product_id AND sku.meta_key = 'sku'