UPDATE:
由于没关系你这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
怎么了'WHERE 1 = 1'?你的查询到底有什么问题?它不起作用吗?它不会返回正确的结果吗? *您想要返回哪个*地址簿条目? – 2013-02-23 00:14:50
1. WHERE 1 = 1是多余的2.为什么你在address_book中每个客户有超过一个条目?和3.因为你有多个条目 - 你应该选择显示哪一个? – alfasin 2013-02-23 00:15:26
哪个address_book条目返回的决定因素是什么? – sgeddes 2013-02-23 00:17:05