【问题标题】:select query using leftjoin doesnt work使用左连接选择查询不起作用
【发布时间】:2014-02-10 14:01:12
【问题描述】:

我想离开加入这个查询,但它似乎不起作用

 select *,(SELECT datediff(t1.expirydate,CURDATE())as daysleft
 from tbl1 t1,
 left join tbl2 t2  on (t1.mid=t2.mid and t1.pid=t2.pid and t1.uid=3)

您的 SQL 语法有错误;

right syntax to use near 'left join tbl2 t2  on (t1.mid=t2.mid and t1.pid=t2.p' at line 3

请告诉我我哪里错了

这里要加入 3 张桌子,但不起作用

 SELECT t1.*, t2.*,t3.* datediff(t1.expirydate, CURDATE()) AS daysleft FROM tbl1 t1 left join  
  tbl2 t2 on t1.mid = t2.mid and t1.pid = t2.pid left join tbl3 t3 on t3.pid = t2.pid where t1.uid=3 

对于 knw 3 表,但我得到语法错误

【问题讨论】:

    标签: mysql sql left-join


    【解决方案1】:

    您不要在连接之间放置逗号。

    SELECT t1.*, t2.*, datediff(fsp.expirydate, CURDATE()) AS daysleft
    FROM tbl1 t1
    left join tbl2 t2 on t1.mid = t2.mid and t1.pid = t2.pid
    cross join fsp
    where t1.uid = 3
    

    您也不应该将t1.uid = 3 条件放在ON 子句中。 ON 应该只包含与两个表相关的条件,对于LEFT JOIN,它还可以包含您要加入的表上的条件(在这种情况下为t2)。

    【讨论】:

    • 这里正在加入 3 个表,但不起作用 SELECT t1.*, t2.*,t3.* datediff(t1.expirydate, CURDATE()) AS daysleft FROM tbl1 t1 left join tbl2 t2 on t1。 mid = t2.mid 和 t1.pid = t2.pid left join tbl3 t3 on t3.pid = t2.pid where t1.uid=3 .......... for knw 3 table 但我得到语法错误
    • 你在那个评论里问什么?
    • 你在我的评论中有更新
    • 你能做一个 sqlfiddle 吗?
    • t3.* 后面缺少逗号。
    【解决方案2】:

    第 2 行的“t1”后面没有逗号。

    另外我不认为你可以在第 1 行做“*”,你需要做“SELECT *”或“SELECT column, column2”

    【讨论】:

      【解决方案3】:

      Left Join之前使用过逗号(,),语法不正确

      试试这个

       select t1.*,(SELECT datediff(fsp.expirydate,CURDATE())as daysleft
       from tbl1 t1
       left join tbl2 t2  on (t1.mid=t2.mid and t1.pid=t2.pid and t1.uid=3)
      

      Join Syntax

      【讨论】: