【问题标题】:Mysql SELECT query HAVING combined with INNER JOIN WHERE not showing all requested dataMysql SELECT 查询 HAVING 结合 INNER JOIN WHERE 未显示所有请求的数据
【发布时间】:2016-01-22 13:30:01
【问题描述】:

我编写了一个复杂的 查询,它没有返回所有请求的数据。似乎 INNER JOIN 无法正常工作。 此查询确实返回了正确的结果集,我只是缺少连接表中的列。

我的查询:

SELECT Table1.Col1, Col2, Col3, Col4, Col5, Col6, ( 6371 * acos( cos(radians(?) )
* cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) 
* sin( radians( lat ) ) ) ) AS distance 
FROM Table1
INNER JOIN Table2 
ON Table1.Col1 = Table2.Col1
WHERE TABLE2.Col2 =? 
AND Table2.Col3 =?
HAVING distance < ? 
ORDER BY distance

我的结果只包含来自 Table1 的值,为什么 INNER JOIN 不起作用?

编辑: 我根据 P.Jairaj 的回答将我的查询更改为这个,这似乎对我有用:

        SELECT T1.Col1, T1.Col2, T1.Col3, T1.Col4, T1.Col5, T1.Col6, T2.Col1, 
        ( 6371 * ACOS( COS( RADIANS('?') ) * 
        COS( RADIANS( lat ) ) * COS( RADIANS( lng ) - RADIANS('?') ) + 
        SIN( RADIANS('?') ) * SIN( RADIANS( lat ) ) ) ) AS distance
        FROM T1, T2
        WHERE T1.Col1 = T2.Col1
        AND T2.Col2 =  '?'
        AND T2.Col3 =  '?'
        HAVING distance <  '?'
        ORDER BY distance

【问题讨论】:

  • 试试left outer join
  • 您需要养成accepting answers 的习惯,它可以帮助您解决问题。
  • 我得到的答案让我更接近解决方案,但并非 100% 正确。在我看来,如果我接受这些作为答案,它会让未来的访客感到困惑......

标签: mysql php mysql inner-join


【解决方案1】:

试试

SELECT t1.Col1, t1.Col2, t2.Col3, t1.Col4, t2.Col5, t2.Col6, ( 6371 * acos( cos(radians(?) )
* cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) 
* sin( radians( lat ) ) ) ) AS distance FROM Table1 t1, Table2 t2 
Where t1.Col1 = t2.Col1
AND t2.Col2 =? AND t2.Col3 =?
AND distance < ? 
ORDER BY distance

【讨论】:

  • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,也适用于 SO 的未来访问者。
  • 这实际上是在使用 HAVING 距离而不是 AND 距离,因为不可能将 WHERE 或 AND 用于由 AS 语句创建的伪列。但是,如果这是从多列中选择的正确方法,或者我是否需要使用 JOIN,谁能解释我?
【解决方案2】:

您尚未在所有选定项目上指定第二个表。例如,如果您想要来自Table2 的东西,您会声明:

SELECT Table1.Col1, Table1.Col2, Table2.Col1, Table2.Col2

对于您声明的每一列,您应该明确表选择。

【讨论】:

    【解决方案3】:

    尝试拥有代替拥有,以及在哪里可以尝试

    HAVING TABLE2.Col2 =? AND Table2.Col3 =? AND distance < ? ORDER BY distance
    

    【讨论】:

    • 您将WHERE 替换为HAVING?这不起作用,它会引发语法错误。
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多