你实际上想把它标准化一点。查看http://en.wikipedia.org/wiki/First_normal_form
我认为你正在做的是:
Beer
BeerID BeerName BeerManufacturer
------ -------- ----------------
1 Beer1 Brewer 1
2 Beer2 Brewer 1
3 Beer3 Brewer 2
4 Beer4 Brewer 3
AltBeer
AltBeerID BeerID BeerID1 BeerID2 BeerID3
--------- ------ ------- ------- -------
1 1 3 4
2 2 5
3 4 7
相反,您希望只有一列用于替代啤酒。在这种情况下,AltBeer 变为
AltBeer
AltBeerID BeerID AltBeer
--------- ------ -------
1 1 3
1 1 4
2 2 5
3 4 7
然后在 Beer 和 AltBeer 上进行连接(基于 BeerID)将为您提供与原始啤酒相似的 BeersID 列表。您可以通过再次加入 Beer 来查看备用啤酒的详细信息(基于 BeerID 和 AltBeer)
SELECT beer.beermanufacturer,
beer.beername,
beer_1.beername AS recbeer,
beer_1.beermanufacturer AS recbeerman
FROM (altbeer
INNER JOIN beer
ON altbeer.beerid = beer.beerid)
INNER JOIN beer AS beer_1
ON altbeer.altbeer = beer_1.beerid;
结果是这样的(没有重复,保证)
BeerName BeerManufacturer RecBeer RecBeerMan
-------- ---------------- ------- -----------
Beer1 BeerMan1 Beer3 BeerMan2
Beer1 BeerMan1 Beer4 BeerMan3
(当然,如果我们正确地规范了这一切,我们还将 Beer Manufacturer 拆分到自己的表中,因为啤酒和制造商之间存在多对一的关系。)