【问题标题】:MySQL join a table to another table only if [duplicate]MySQL仅在[重复]时将表连接到另一个表
【发布时间】:2017-02-26 15:43:56
【问题描述】:

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

我要做的是从订单、用户、payment_methods_translation 中选择特定字段并仅在 orders.payment_method_id = '3' 时加入 bank_accounts_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_method_id = '3' 和 orders.bank_id = bank_accounts_translation.bank_id 时,我才能从 bank_accounts_translation 中选择所有字段

【问题讨论】:

  • 首先是join,然后是where (select ... from ... join ... on ... where)。
  • 不要混合符号/标准。使用 Inner Join 语法或使用 , 语法。
  • 不要使用逗号连接语法。时期。并查看meta.stackoverflow.com/questions/333952/…

标签: mysql if-statement join


【解决方案1】:

左连接应该这样做......我

  • 重构代码以使用当前的 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 服务器版本相对应的手册,了解在 'JOIN bank_accounts_translation ON (orders.payment_method_id='3' AND order' 在第 18 行"
  • 你里面为什么有(?在我的示例中,我没有看到 (。至于字段列表中的未知列 u.id....users.id 是 u.id 所以我不知道它怎么可能是未知的...它在您的查询中,所以我必须查看表结构用于订单、用户、payment_methods_translation 和 bank_accounts_translation。
猜你喜欢
  • 2015-01-08
  • 2017-05-23
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多