我有两张桌子,一张和另一张放在一起。JOIN工作正常,但我得到了两个返回的记录。这(查看我的查询)是正确的,但我需要根据条件返回两条记录中的一条。这可以用一个查询来管理吗?
表:

product_id | name  | quantity | order_id | store_url
51         | prod1 | 1        | 17       | http://www.opencarttest.com/
48         | prod2 | 3        | 17       | http://www.opencarttest.com/

表:
oc_product_id | price | store_url
51            | 50.00 | http://www.opencarttest.com/
51            | 89.95 |
48            | 15.00 |

我当前的查询:
SELECT
  oop.product_id,
  oop.name,
  oop.quantity,
  p.price,
  p.store_url
FROM
  oc_order_product AS oop
JOIN
  product AS p
ON
  p.oc_product_id = oop.product_id
WHERE
  oop.order_id='17' AND oop.store_url='http://www.opencarttest.com/'

这将返回:
product_id | name  | price | store_url
51         | prod1 | 50.00 | http://www.opencarttest.com/
51         | prod1 | 89.95 |
48         | prod2 | 15.00 |

但我只需要这个:
product_id | name  | price | store_url
51         | prod1 | 50.00 | http://www.opencarttest.com/
48         | prod2 | 15.00 |

我只需要一个匹配oc U product U id的产品结果,但它可以是这两个产品中的一个。我需要商店url等于JOIN的产品,或者没有商店url的产品。
编辑:添加了尾随斜杠

最佳答案

这将给你你想要的东西,但是以牺牲性能为代价:

SELECT
  oop.product_id,
  oop.name,
  oop.quantity,
  p.price,
  p.store_url
FROM
  oc_order_product AS oop
JOIN
  product AS p
ON
  p.oc_product_id = oop.product_id
  and
  (p.store_url = oop.store_url
   or
   not exists (select 1 from product where oc_product_id=p.oc_product_id and store_url is not null)
  )
WHERE
  oop.order_id='17' AND oop.store_url='http://www.opencarttest.com'

这是sqlfiddle
请注意,对于问题中显示的特定数据,这是行不通的,您自己的查询也是行不通的,因为一个表中有带有尾随斜杠的URL,而另一个表中没有。在我的示例中,我删除了所有位置的尾随斜线。

关于php - MYSQL在condition1上加入,否则在condition2上加入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22671948/

10-12 15:29