我有以下两个MySQL查询。
$ delivery_id =
select c.countries_id
from orders o
LEFT JOIN countries c
ON c.countries_name = o.delivery_country
where o.orders_id = 1208;
$ billing_id =
select c.countries_id
from orders o
LEFT JOIN countries c
ON c.countries_name = o.billing_country
where o.orders_id = 1208;
将结果放入变量(PHP)中。我想知道的是,有没有办法将这两个查询组合成一个单一的查询而不是两次运行它。 (这是使用ZenCart的查询工厂($db->Execute
),其中结果将被放入fields
数组并被调用。
有关表格的信息:orders
中的每个订单都会包含一个结算地址和送达地址,并在相应的字段billing_country
和delivery_country
中找到国家/地区名称。但是,并非所有订单都包含送货地址。如何将这两者合并为一个查询?我知道我可以使用某种LEFT JOIN,但我不确定如何编写它。
答案 0 :(得分:3)
您可以使用不同的别名加入countries表两次:
select
c1.countries_id AS delivering_id,
c2.countries_id AS billing_id
from orders o
LEFT JOIN countries c1
ON c1.countries_name = o.delivery_country
LEFT JOIN countries c2
ON c2.countries_name = o.billing_country
where o.orders_id = 1208;
答案 1 :(得分:2)
使用union运算符as,
select c.countries_id
from orders o
LEFT JOIN countries c
ON c.countries_name = o.delivery_country
where o.orders_id = 1208
UNION
select c.countries_id
from orders o
LEFT JOIN countries c
ON c.countries_name = o.billing_country
where o.orders_id = 1208;