【问题标题】:MySQL query with LEFT JOIN and LIKE conditions doesn't show what I expected具有 LEFT JOIN 和 LIKE 条件的 MySQL 查询未显示我的预期
【发布时间】:2018-08-16 11:36:56
【问题描述】:

我正在尝试进行从 4 个表返回数据的查询,当我尝试添加一些附加条件时,问题就出现了。该查询适用于 LEFT JOIN 没有条件的 4 个表,但是当我输入 LIKE 条件时,结果没有任何变化。结果必须是仅以 40.95 开头的带有“lat”的选择

这段代码正在运行:

if($resultset=getSQLResultSet("SELECT name, lat, lng, description, 
COALESCE(section, 0), COALESCE(AVG(score), 0) FROM places P LEFT JOIN ratings R ON P.id=R.place LEFT JOIN ratings_sections RS ON R.id=RS.rating LEFT JOIN categories C ON P.type=C.type GROUP BY P.name, RS.section ORDER BY P.name, RS.section")){
while ($row = $resultset->fetch_array(MYSQLI_NUM)){
    echo json_encode($row);
    }
}

但是当我设置 LIKE 条件时没有任何变化:

if($resultset=getSQLResultSet("SELECT name,lat, lng, description, COALESCE(section, 0), COALESCE(AVG(score), 0) FROM places P LEFT JOIN ratings R ON P.id=R.place AND P.lat LIKE '40.95%' LEFT JOIN ratings_sections RS ON R.id=RS.rating LEFT JOIN categories C ON P.type=C.type GROUP BY P.name, RS.section ORDER BY P.name, RS.section")){
    while ($row = $resultset->fetch_array(MYSQLI_NUM)){
        echo json_encode($row);
    }
}

Result of the query

【问题讨论】:

  • 从不FROM 子句中使用逗号。 始终使用正确、明确、标准 JOIN 语法。
  • 也永远不要问一个问题,说明“不起作用”。明确说明它是如何不起作用的。
  • 您在两个选择之间使用 UNION 来返回不同的列数(和类型)......只有当所涉及的选择包含相同的数字和列的 tyoe 时,联合才起作用 .. 以相应的顺序跨度>
  • @scaisEdge 既不是 UNION ALL?那么,如何加入两个具有不同列和一些 LIKE 条件的表?因为 LEFT JOIN 它也不适合我
  • 你应该更新你的问题并添加一个适当的数据样本和预期的结果..(联合所有返回所有行..联合只不同的行)所以你对联合所有的问题是不适用的..告诉我们你真正需要什么..不要告诉我们..不工作..

标签: php mysql sql left-join sql-like


【解决方案1】:

您的第三个查询是错误的,因为您正在对两个查询进行UNION,其中第一个包含四列,第二个只有一列。

SELECT name, lat, lng, description
FROM places P, categories C
WHERE P.lat LIKE '40.96%'
OR lat LIKE '40.95%'
AND P.type=C.type
GROUP BY P.name
UNION
SELECT score
FROM ratings_sections RS, rating R
WHERE RS.rating=R.id

你的第四个查询也错了,比如这里:

LEFT JOIN GROUP BY P.name, RS.section ORDER BY P.name, RS.section

出于显而易见的原因,您不能在 JOIN 中使用 GROUP BY 子句。

【讨论】:

  • 是的,我不知道 UNION ALL,但我刚刚尝试过,它不起作用。
  • 而且我在第四个查询中发布之前删除了一些代码,对不起,我是第一次来这里
  • @Raquel 很高兴它有帮助!
【解决方案2】:

SQL UNION ALL 运算符用于组合 2 个或多个 SELECT 语句的结果集。

SELECT name,lat, lng, description,... FROM

SELECT score FROM

不一样

【讨论】:

  • 还有什么建议吗?
  • @Raquel 如果它不起作用,为什么这个答案被接受
  • 因为它告诉我当列不同时我不能使用 UNION ALL @RiggsFolly 我不知道这一点
  • @Raquel 在这种情况下,Ildar 的答案是一个更好的答案:更明确并有一些解释。如果我是你,我会接受他/她的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-25
  • 1970-01-01
相关资源
最近更新 更多