我有两张桌子,一张和另一张放在一起。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/