MySQL仅在以下情况下将一个表连接到另一个表
我这里有一个复杂的问题。我必须按名称选择列,而不仅仅是用户订单。*。因为我有多个来自同名不同表的列 我试图做的是,仅当orders.payment\u method\u id='3'时,从orders、users、payment\u methods\u translation和join bank\u accounts\u translation中选择特定字段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
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标准,您似乎在混合它们
- 使用表别名提高可读性
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,所以我不知道它怎么可能是未知的…它在您的查询中,所以我必须查看订单、用户、付款方法和银行账户的表结构。