简短的回答是,你不能。你总是要选择固定数量的列。但是,通过使用on关键字,可以大大改进查询的语法。例如:
SELECT
birthdate,
firstName,
lastName
FROM
Persons
INNER JOIN PersonsLastNames
ON Persons.id = PersonsLastNames.id
INNER JOIN PersonsFirstNames
ON Persons.id = PersonsFirstNames.id
WHERE
lastName = 'Anderson'
GROUP BY
lastName, firstName
HAVING
count(lastName) = 1
当然,我的查询在末尾还包含一些额外的条款,这样只会抓取只有一个姓氏的人,但您可以始终删除这些条款。
现在,您可以做的是选择您想要检索的最大数量的这些,然后这样做:
SELECT
birthdate,
lastName,
PersonsFirstNames.firstName,
IFNULL(p.firstName,''),
IFNULL(q.firstName,'')
FROM
Persons
INNER JOIN PersonsLastNames
ON Persons.id = PersonsLastNames.id
INNER JOIN PersonsFirstNames
ON Persons.id = PersonsFirstNames.id
LEFT JOIN PersonsFirstNames p
ON Persons.id = p.id
AND p.firstName <> PersonsFirstNames.firstName
LEFT JOIN PersonsFirstNames q
ON Persons.id = q.id
AND q.firstName <> PersonsFirstNames.firstName
AND q.firstName <> p.firstName
GROUP BY
lastName
但我真的不推荐。最好的办法是检索多行,然后在您使用/开发的任何应用程序中对它们进行迭代。
在开始之前,如果您还不熟悉的话,请确保您已经了解了连接类型(左连接和内部连接)。希望这有帮助。
编辑:在这种情况下,您可能还需要考虑稍微复杂一些的group by子句,例如。
GROUP BY
Persons.id, lastName