【发布时间】:2009-07-07 18:55:33
【问题描述】:
我试图避免在 while 循环中使用查询。因此,我得出结论,我应该使用交叉连接。举个例子:
SELECT * FROM products
CROSS JOIN images USING (imgId)
CROSS JOIN productcolors ON colorsId = colorId
WHERE productId = 1
应该返回两行(如下表结构):
imgId | productId | colorId | imgSrc | colorName
1 1 1 img1_0.png copper
imgId | productId | colorId | imgSrc | colorName
1 1 1 img1_0.png slate
当 productId = 2 时应该返回一行:
imgId | productId | colorId | imgSrc | colorName
null 2 -1 null null
images 表包含多个具有相同 imgId 的记录,这同样适用于 productcolors,其中几个 colorIds 可以/将具有相同的值。 images 表中也可能没有记录(例如,如果产品表中的 imgId = -1)。这意味着产品没有颜色。现在,当我进行此查询并且 images 表或 productcolors 表不包含 imgId 或 colorId 的记录时,查询将根本不返回任何结果。我希望行中的字段包含空值,而不是不返回任何内容,表现得像左外连接和交叉连接。
也许我应该在我的 whileloop 中进行查询?有没有其他方法可以解决这个问题?
编辑:我的桌子
products:
productId | colorsId | imgId
1 1 1
2 -1 -1 //product 2 has no images nor colors
productcolors:
colorId | colorName
1 copper
1 slate
images:
imgId | imgSrc
1 img1_0.png
【问题讨论】:
-
您希望查看的数据样本会有所帮助。
-
很难理解你想要什么。我认为您的数据模型有点误导。即使不是,交叉连接也有 90% 不是您想要的。在继续调查交叉连接之前,请考虑发布表的模式。同样,很可能不是您想要的。
-
“表现得像左外连接。”那为什么不使用左外连接呢?
-
@Shannon:表现得像左外连接和交叉连接*