Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用内部联接而不从联接表返回任何列_Mysql_Inner Join - Fatal编程技术网

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标准)而不是双引号。仅对字符串和日期常量使用单引号有助于防止意外的语法错误。

这一简单性让我感到羞愧!谢谢!!这一简单性让我感到羞愧!谢谢!!这是有价值的输入,帮助我更全面地理解问题。谢谢!这是有价值的输入,有帮助让我更全面地理解这个问题。谢谢!