アップデート:
どの address_book エントリを取得するかは問題ではないため、このクエリは最大address_book_id
値を持つものを取得します。
SELECT c.customers_id,
c.customers_firstname,
c.customers_lastname,
ab.address_book_id,
ab.customers_id,
ab.entry_company,
ab.entry_firstname,
ab.entry_lastname,
ab.entry_street_address
FROM customers c LEFT JOIN
address_book ab ON c.customers_id=ab.customers_id AND
ab.address_book_id = (SELECT MAX(address_book_id)
FROM address_book
WHERE customers_id = c.customers_id)
ORDER BY c.customers_id;
理論的には、アドレス帳のエントリが関連付けられていない顧客がいる可能性があります。LEFT JOIN
それらを引っ張ることができます。この動作を望まない場合は、 に変更LEFT JOIN
してINNER JOIN
ください。
ここで作業中のsqlfiddleです
元の回答
これは私の最初の答えであり、異なる行から任意の値を取得できますが、MySql で動作します。@Gordon Linoffの回答の説明を参照してください。
SELECT c.customers_id,
c.customers_firstname,
c.customers_lastname,
MAX(ab.address_book_id),
MAX(ab.customers_id),
MAX(ab.entry_company),
MAX(ab.entry_firstname),
MAX(ab.entry_lastname),
MAX(ab.entry_street_address)
FROM customers c INNER JOIN
address_book ON c.customers_id=ab.customers_id
GROUP BY c.customers_id, c.customers_firstname, c.customers_lastname,
ORDER BY c.customers_id