我有以下代码。联接中的选择本身工作得很好,但是当我尝试让它在联接中工作时,我收到一个错误:
您的 SQL 语法有误;请查看与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的 tup.userid=user_id' 上的"as S") 附近使用的正确语法
Select tup.*, tu.email, S.user_id, S.name, S.value
From tb_user_profile tup
join tb_user tu on tup.userid=tu.id
Join((Select tba.id, tba.accountName, tba.currentBalance
from tb_bank_account tba )as T
union
Select tpi.user_id, tpi.name, tpi.value
from tb_property_item tpi )as S) on tup.userid=user_id
我做错了什么?其次,我需要在上面的结构中添加另外两个表。
你不会在union
中为子查询设置别名;而是将别名放在最后。 试试这个:
Select tup.*, tu.email, S.user_id, S.name, S.value
From tb_user_profile tup join
tb_user tu
on tup.userid = tu.id Join
((Select tba.id, tba.accountName, tba.currentBalance
from tb_bank_account tba
) union
(Select tpi.user_id, tpi.name, tpi.value
from tb_property_item tpi
)
) s
on tup.userid = s.user_id ;
顺便说一句,union all
比 union
更有效,如果您知道自己没有或不关心重复项。
不要为union
的选择设置别名
Select tup.*, tu.email, X.user_id, X.name, X.value
From tb_user_profile tup
join tb_user tu on tup.userid=tu.id
Join
(
Select tba.id, tba.accountName, tba.currentBalance
from tb_bank_account tba
union
Select tpi.user_id, tpi.name, tpi.value
from tb_property_item tpi
) X on tup.userid = Xuser_id
我查看了您的查询,发现:
- 括号中的错误:您打开了一些,忘记关闭它们
- 您声明了两次别名
- 您忘了在最后一个
on
子句中编写行源。
我建议您以易于查看的方式编写查询。以下是更正:
select
tup.*, tu.email, S.user_id, S.name, S.value
from
tb_user_profile tup
join tb_user tu on tup.userid=tu.id
join (
select
tba.id, tba.accountName, tba.currentBalance
from
tb_bank_account as tba
union select
tpi.user_id, tpi.name, tpi.value
from
tb_property_item as tpi
) as S on tup.userid=s.user_id;
您的 UNION 语句必须具有相同的确切列数,并且这些列类型的顺序必须相同。 这些列可能是不同的来源,只需确保计数和类型顺序相同即可。 返回的列名和类型由第一个 SELECT 确定。
您正在选择 * 加上第一个选择中的另外 5 列。 您的辅助选择只有 2 列。
编辑:您的代码清理更改了我的答案:您的子查询表没有别名,SQL 不知道如何引用它。 ON也是模棱两可的。 哪个用户标识?? 尝试更改为以下内容:
Select tup.*, tu.email, S.user_id, S.name, S.value
From tb_user_profile tup
join tb_user tu on tup.userid=tu.id
Join (Select tba.id, tba.accountName, tba.currentBalance
from tb_bank_account tba
union
Select tpi.user_id, tpi.name, tpi.value
from tb_property_item tpi) S on tup.userid=S.id