gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:17:19 25 4
gpt4 key购买 nike

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

我有两张 table 。油漆项目和特殊项目。两个表都有唯一的列名称(painteditemid、specialitemid 等),但两个表共享相似的值。我想从两个表中获取结果。

假设这是我的设置:

PaintedItems

  • paintedItemName
  • paintedItemColor
  • 可见

特殊元素

  • 特殊元素名称
  • 特殊元素颜色
  • 可见

我使用了这个查询:

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。现在,您得到的是笛卡尔积,这就是结果如此之大的原因:

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

关于php - MySQL - 从多个表中选择,可能没有连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com