orders、user_addressesおよびの 3 つのテーブルがありalternate_addressesます。ユーザーには常に user_address があります。オーダーには があり、これにはまたはalternate_address_idが含まれる場合があります。alternate_address_idNULL
今、私のクエリは次のようになります。
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())最初のアドレスの後にどのアドレスを使用する必要があるかを知っているので、すべてのアドレス フィールドの一部を行うのは冗長に思えます。
これを行うためのより良い方法はありますか (テーブルのデザインを変更できません)?
ご意見ありがとうございます。