MySQL仅在以下情况下将一个表连接到另一个表

MySQL仅在以下情况下将一个表连接到另一个表,mysql,if-statement,join,Mysql,If Statement,Join,我这里有一个复杂的问题。我必须按名称选择列,而不仅仅是用户订单。*。因为我有多个来自同名不同表的列 我试图做的是,仅当orders.payment\u method\u id='3'时,从orders、users、payment\u methods\u translation和join bank\u accounts\u translation中选择特定字段 SELECT orders.id as orderid, orders.final_total, orders.use

我这里有一个复杂的问题。我必须按名称选择列,而不仅仅是用户订单。*。因为我有多个来自同名不同表的列

我试图做的是,仅当orders.payment\u method\u id='3'时,从orders、users、payment\u methods\u translation和join bank\u accounts\u translation中选择特定字段

SELECT 
   orders.id as orderid,
   orders.final_total,
   orders.user_id,
   orders.auto_cancel,
   users.id as userid,
   users.first_name,
   payment_methods_translation.payment_method_id,
   payment_methods_translation.name 
FROM 
   orders,users, 
   payment_methods_translation
WHERE
   orders.id='$id' AND 
   orders.user_id = users.id AND
   orders.payment_method_id = payment_methods_translation.payment_method_id AND 
   orders.auto_cancel='1' 
JOIN 
   bank_accounts_translation ON (orders.payment_method_id='3' 
   AND orders.bank_id = bank_accounts_translation.bank_account_id)

但是我得到了一个mysql错误。因此,仅当orders.payment\u method\u id='3'和orders.bank\u id=bank\u accounts\u translation.bank\u id

左连接应该执行此操作时,我如何从bank\u accounts\u translation中选择所有字段。。。我

  • 重构代码以使用当前的ANSI标准,您似乎在混合它们
  • 使用表别名提高可读性
LEFT JOIN表示返回前面列出的表中的所有记录,并且只返回那些与要联接的表的on条件匹配的记录

SELECT O.id as orderid
      ,O.final_total
      ,O.user_id
      ,O.auto_cancel
      ,u.id as userid
      ,u.first_name
      ,PMT.payment_method_id
      ,PMT.name 
FROM orders O
INNER JOIN users U
   ON O.user_id = U.id 
INNER JOIN payment_methods_translation  PMT
   ON O.payment_method_id = PMT.payment_method_id 
LEFT JOIN bank_accounts_translation  BAT
   ON O.payment_method_id='3' 
  and O.bank_id = BAT.bank_account_id
WHERE O.id='$id' 
  and O.auto_cancel='1' 

首先
加入
,然后
在何处
选择…从…加入…在…何处
)。不要混淆符号/标准。使用内部连接语法或使用,语法。不要使用逗号连接语法。时期查看“字段列表”中的未知列“u.id”-(订单而非订单)新代码错误“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以了解在第18行的“JOIN bank\u accounts\u translation ON(orders.payment\u method\u id='3'和orde'附近使用的正确语法”为什么有
在那里?我看不到任何
在我的示例中。至于字段列表中的未知列u.id…
users.id
是u.id,所以我不知道它怎么可能是未知的…它在您的查询中,所以我必须查看订单、用户、付款方法和银行账户的表结构。