假设我有一张看起来像这样的表格:
+----+--------------+-------+----------------+------------+
| id | product_name | price | bulk_reference | bulk_count |
+----+--------------+-------+----------------+------------+
| 1 | xxxx | 11.99 | 0 | 0 |
+----+--------------+-------+----------------+------------+
| 2 | zzzz | 22.99 | 0 | 0 |
+----+--------------+-------+----------------+------------+
| 3 | | | 2 | 10 |
+----+--------------+-------+----------------+------------+
我可以选择所有产品等,没问题。但是 - 我需要做的是返回所有产品,但行 WHERE bulk_reference > 0 需要返回行中未设置的引用行值......在同一个结果集中。
我需要为某些领域做这件事。所以假设我想选择product_name
ID 3 的字段。它应该zzzz
在bulk_reference
字段设置为 2 时返回,所以它应该从行 ID=2 中获取值。
我怎样才能只用 MySQL 做到这一点?
=======================================
更新:
到目前为止发布了所有答案,我收到错误消息 #1054Unknown column 'p.bulk_reference' in 'field list'.
我不知道为什么会发生这种情况......
这是对发布的答案之一的改编:
SELECT p.id ,
IF(p.bulk_reference>0,r.sales_price,p.sales_price) AS sales_price
, p.bulk_reference
, p.bulk_count
FROM products_attribs_cz p
LEFT JOIN products_attribs_cz r ON r.id = p.bulk_reference
AND p.bulk_reference > 0
WHERE p.id=166;
但是,无论我尝试过什么解决方案,我总是会收到错误...
ID 在此表中是唯一的。正在选择的字段会更改并动态生成。总是只有一个结果。不是几个。我总是选择一个独特的行,但是,它是一个大包装的产品。例如,我们在行 ID=1 和 product_name=BlackBerry 上有一部 BlackBerry 手机。但在另一行 (ID=2),我们有同一部手机的批量包装,因此 ID=2 & product_name=blank & bulk_reference=1。我们需要从 bulk_referenced 行返回产品的名称,因为它是相同的产品,只是在散装包装中。
(这个想法是批发商在批量订单上获得折扣。因此,如果订购 1 部手机,他们将获得正常价格,如果他们订购大量 10 部手机,他们将获得 20% 的折扣)