admin

MySQL-从多个表中选择,可能没有联接?

sql

自从我需要帮助已经有一段时间了,但是今天我基本上是从您的知识中获得帮助的。目前,我非常棘手的是一个非常烦人的SQL问题,如下所示。

我有两张桌子。Painteditems和specialitems。两个表都有唯一的列名(painteditemid,specialitemid等),但是两个表共享相似的值。我想从两个表中获取结果。

假设这是我的设置:

PaintedItems

  • paintedItemName
  • paintedItemColor
  • visible

特别项目

  • specialItemName
  • specialItemColor
  • visible

我使用了以下查询:

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万行。我应该如何处理?

先感谢您。

编辑:固定间距,代码块


阅读 186

收藏
2021-06-07

共1个答案

admin

确实听起来像您想要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 *您的列名。此外,两个查询中的列数和数据类型数必须匹配。

UNION ALL将返回两个表中的所有行,如果您只想要DISTINCT行,则将要使用UNION

2021-06-07