我有三个表orders
:user_addresses
和alternate_addresses
。一个用户总是有一个 user_address。一个订单有一个alternate_address_id
,其中可能包含一个alternate_address_id
或NULL
。
现在我的查询看起来像这样:
SELECT
IF(ISNULL(orders.alternate_address_id), a.firstname, u.firstname) AS firstname,
IF(ISNULL(orders.alternate_address_id), a.lastname, u.lastname) AS lastname
-- etc.
FROM orders
LEFT JOIN alternate_addresses a ON (
orders.alternate_address_id IS NOT NULL
AND orders.alternate_address_id = a.alternate_address_id)
LEFT JOIN user_addresses u ON (
orders.alternate_address_id IS NULL
AND orders.user_id = u.user_id)
为每个地址字段做这IF(ISNULL())
部分似乎有点多余,因为我知道在第一个地址之后我需要使用哪个地址。
有没有更好的方法来做到这一点(我不能改变表格的设计)?
谢谢你的想法。