Mysql 使用内部联接而不从联接表返回任何列
运行Mysql 使用内部联接而不从联接表返回任何列,mysql,inner-join,Mysql,Inner Join,运行内部联接类型的查询时,我会得到重复的列名,这可能会造成问题。这里已经详细介绍了这一点,通过SELECTing只选择我需要的列,我找到了这个问题的解决方案,从逻辑上说是合理的 但是,我想知道如何运行这样一个查询,而不实际返回联接表中的任何列 这是我的MySQL查询 SELECT * FROM product z INNER JOIN crosslink__productXmanufacturer a ON z.id = a.productId WHERE (z.ti
内部联接
类型的查询时,我会得到重复的列名,这可能会造成问题。这里已经详细介绍了这一点,通过SELECT
ing只选择我需要的列,我找到了这个问题的解决方案,从逻辑上说是合理的
但是,我想知道如何运行这样一个查询,而不实际返回联接表中的任何列
这是我的MySQL查询
SELECT * FROM product z
INNER JOIN crosslink__productXmanufacturer a
ON z.id = a.productId
WHERE
(z.title LIKE "%search_term%" OR z.search_keywords LIKE "%search_term%")
AND
z.availability = 1
AND
a.manufacturerId IN (22,23,24)
问题
如何修改此MySQL查询以仅返回
product
中的列,以及crosslink\uuu productXmanufacturer
中的无列?将表名添加到*
中。替换
SELECT * FROM product z
与
将表名添加到
*
中。替换
SELECT * FROM product z
与
通常在执行此操作时,使用
in
或exists
而不是join
可以更清楚地表达您的意图。join
用于筛选,因此将条件放入where
子句中是有意义的:
SELECT p.*
FROM product p
WHERE (p.title LIKE '%search_term%' OR p.search_keywords LIKE '%search_term%') AND
p.availability = 1 AND
exists (SELECT 1
FROM pXm
WHERE pXm.productId = p.id AND pxm.manufacturerId IN (22, 23, 24)
);
有了适当的索引,它的运行速度应该至少与join
版本(索引是crosslink\uu productXmanufacturer(productId,manufacturerId)
)一样快。此外,如果crosslink\uu productXmanufacturer
中有多个匹配项,您不必担心返回重复记录
您可能会注意到我对查询所做的另外两个小更改。首先,表别名是表名的缩写,使逻辑更易于遵循。其次,字符串常量使用单引号(ANSI标准)而不是双引号。仅对字符串和日期常量使用单引号有助于防止意外的语法错误。通常在执行此操作时,使用
中的或存在的而不是连接的意图可能会更清楚。连接的作用是用于过滤,因此将条件置于where
子句有意义:
SELECT p.*
FROM product p
WHERE (p.title LIKE '%search_term%' OR p.search_keywords LIKE '%search_term%') AND
p.availability = 1 AND
exists (SELECT 1
FROM pXm
WHERE pXm.productId = p.id AND pxm.manufacturerId IN (22, 23, 24)
);
有了适当的索引,它的运行速度应该至少与join
版本(索引是crosslink\uu productXmanufacturer(productId,manufacturerId)
)一样快。此外,如果crosslink\uu productXmanufacturer
中有多个匹配项,您不必担心返回重复记录
您可能会注意到我对查询所做的另外两个小更改。首先,表别名是表名的缩写,使逻辑更易于遵循。其次,字符串常量使用单引号(ANSI标准)而不是双引号。仅对字符串和日期常量使用单引号有助于防止意外的语法错误。这一简单性让我感到羞愧!谢谢!!这一简单性让我感到羞愧!谢谢!!这是有价值的输入,帮助我更全面地理解问题。谢谢!这是有价值的输入,有帮助让我更全面地理解这个问题。谢谢!