mysql - SQL LEFT JOIN/INNER JOIN 不同的结果

标签 mysql

我不知道我做错了什么,但找不到我的陈述的解决方案。目前的说法是:

SELECT tb1.RestaurantID, Title, City
FROM Restaurant AS tb1
LEFT JOIN RestaurantLunch AS tb2 ON tb1.RestaurantID = tb2.RestaurantID
WHERE (MATCH (tb1.Title, tb1.City) AGAINST ('+string1* +string2*' IN BOOLEAN MODE)) LIMIT 5;

当然我也想在其他表(tb2)中搜索字符串,我将我的语句更改为:

SELECT tb1.RestaurantID, Title, City
FROM Restaurant AS tb1
LEFT JOIN RestaurantLunch AS tb2 ON tb1.RestaurantID = tb2.RestaurantID
WHERE (MATCH (tb1.Title, tb1.City, tb2.Text) AGAINST ('+string1* +string2*' IN BOOLEAN MODE)) LIMIT 5;

提交后我得到不同的结果,这根本不符合逻辑。这是为什么?

最佳答案

当您执行左联接并在右侧表的 where 部分中创建条件(在您的情况下为 tb2)时,此左联接成为具有该条件的普通联接。这就是为什么你会得到不同的结果。

试试这个方法:

SELECT tb1.RestaurantID, Title, City
  FROM Restaurant AS tb1
        LEFT JOIN RestaurantLunch AS tb2 
                  ON tb1.RestaurantID = tb2.RestaurantID
                     AND (MATCH (tb2.Text) 
                              AGAINST ('+string1* +string2*' IN BOOLEAN MODE))
 WHERE (MATCH (tb1.Title, tb1.City) 
            AGAINST ('+string1* +string2*' IN BOOLEAN MODE)) LIMIT 5;

关于mysql - SQL LEFT JOIN/INNER JOIN 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43123247/

相关文章:

mysql - 无法使用 Gradle 和 Spring Boot 加载驱动程序类 : com. mysql.jdbc.Driver

php - else 语句不触发 else

php - 如何选择没有 ID 递增的最后一行

php - 使用 mysql 进行搜索查询和匹配排序

python - 更改MySql中的日期格式

php - MySQL 删除多列

php - 用 PHP 循环或 MySQL 重构坏数据库

mysql - 检查表 sql 中是否存在值

PHP(Codeigniter) 构建数组树分别为数组的孙节点分配键名

php - 如何从 Maatwebsite Laravel Excel 中的单元格公式中获取计算值?