自从我需要帮助已经有一段时间了,但是今天我基本上是从您的知识中获得帮助的。目前,我非常棘手的是一个非常烦人的SQL问题,如下所示。
我有两张桌子。Painteditems和specialitems。两个表都有唯一的列名(painteditemid,specialitemid等),但是两个表共享相似的值。我想从两个表中获取结果。
假设这是我的设置:
PaintedItems
特别项目
我使用了以下查询:
SELECT * FROM `painteditems` AS pa, `specialitems` AS sp WHERE (pa.`visible` = 1 OR sp.`visible` = 1) AND (pa.`painteditemname` = 'itemname1' OR sp.`specialitemname` = 'itemname1') AND (pa.`painteditemcolor` = 'black' OR sp.`specialitemcolor` = 'black')
结果是:
Showing rows 0 - 29 ( 259,040 total, Query took 39.4352 sec)
即使两个表总共只包含10.000行。添加此操作无济于事:
GROUP BY pa.`painteditemid`, sp.`specialitemid`
仍然有26万行。我应该如何处理?
先感谢您。
编辑:固定间距,代码块
确实听起来像您想要UNION两个表之间的一个。现在,您得到的是笛卡尔积,这就是为什么结果如此之大的原因:
UNION
select *, 'painted' Source from painteditems where visible = 1 and painteditemname = 'itemname1' and painteditemcolor = 'black' union all select *, 'special' Source from specialitems where visible = 1 and specialitemname = 'itemname1' and specialitemcolor = 'black'
您需要将替换为SELECT *您的列名。此外,两个查询中的列数和数据类型数必须匹配。
SELECT *
UNION ALL将返回两个表中的所有行,如果您只想要DISTINCT行,则将要使用UNION
UNION ALL
DISTINCT