Mav*_*ave 2 php mysql sql join
我需要帮助已经有一段时间了,但今天我基本上可以从你的知识中得到帮助.我目前非常讨厌一个非常烦人的SQL问题,如下所示.
我有两张桌子.彩绘项目和专业.两个表都有唯一的列名(painteditemid,specialitemid等),但两个表共享相似的值.我想从两个表中得到结果.
让我们说这是我的设置:
PaintedItems
SpecialItems
我用过这个查询:
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')
Run Code Online (Sandbox Code Playgroud)
结果导致:
Showing rows 0 - 29 ( 259,040 total, Query took 39.4352 sec)
Run Code Online (Sandbox Code Playgroud)
即使两个表一共只包含10.000行.添加它没有做任何事:
GROUP BY pa.`painteditemid`, sp.`specialitemid`
Run Code Online (Sandbox Code Playgroud)
仍然是260k行.我该怎么做呢?
先感谢您.
编辑:固定间距,代码块
当然听起来你想要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'
Run Code Online (Sandbox Code Playgroud)
您需要替换SELECT *列名称.此外,两个查询中的列数和数据类型必须匹配.
UNION ALL将返回两个表中的所有行,如果您只想要DISTINCT行,那么您将需要使用UNION
| 归档时间: |
|
| 查看次数: |
6463 次 |
| 最近记录: |