Mysql 要从表1和表2中选择的SQL查询?
我正在努力寻找一个我想要运行的查询的答案。我想Mysql 要从表1和表2中选择的SQL查询?,mysql,sql,Mysql,Sql,我正在努力寻找一个我想要运行的查询的答案。我想 SELECT * FROM users AND tempusers WHERE username='joe' 两个表都有一个名为username的列。我经常遇到SQL 1064语法错误,这对我没有多大帮助 数据库结构: 数据库名称:mydb 表格:用户 列:id、用户名、电子邮件、密码 表格:临时用户 列:id、用户名、电子邮件、密码、激活代码。您收到的错误是因为无法从表1和表2中进行选择;这通常不是有效的SQL语法。(我之所以说“通常”,是因为
SELECT * FROM users AND tempusers WHERE username='joe'
两个表都有一个名为username的列。我经常遇到SQL 1064语法错误,这对我没有多大帮助
数据库结构:
数据库名称:mydb
表格:用户
列:id、用户名、电子邮件、密码
表格:临时用户
列:id、用户名、电子邮件、密码、激活代码。您收到的错误是因为无法从
表1和表2中进行选择;这通常不是有效的SQL语法。(我之所以说“通常”,是因为MySQL有一些其他大多数数据库不使用的专有语法。)
联接似乎不起作用,因为您没有描述表之间的那种关系
如果两个表具有完全相同的结构(列名和类型以及相同的列数),则应该可以这样做:
如果表没有相同的精确模式,则必须至少在第一个表中命名列SELECT
:
SELECT
username, id, username, email, password, '' as activationcode
FROM
users
WHERE
username = 'joe'
UNION ALL
SELECT
username, id, username, email, password, activationcode
FROM
tempusers
WHERE
username = 'joe'
您可能必须在第一次选择中为激活代码
提供空格来代替”
,或者如果激活代码
列不是字符列(例如,整数列为0
),则为该列使用适当类型的值.您得到的错误是因为无法从表1和表2中进行选择;这通常不是有效的SQL语法。(我之所以说“通常”,是因为MySQL有一些其他大多数数据库不使用的专有语法。)
联接似乎不起作用,因为您没有描述表之间的那种关系
如果两个表具有完全相同的结构(列名和类型以及相同的列数),则应该可以这样做:
如果表没有相同的精确模式,则必须至少在第一个表中命名列SELECT
:
SELECT
username, id, username, email, password, '' as activationcode
FROM
users
WHERE
username = 'joe'
UNION ALL
SELECT
username, id, username, email, password, activationcode
FROM
tempusers
WHERE
username = 'joe'
您可能必须在第一次选择中为激活代码
提供空格来代替”
,或者如果激活代码
列不是字符列(例如,整数列为0
),则为该列使用适当类型的值.这可能会解决错误,并帮助您思考错误发生的原因:
SELECT *
FROM users, tempusers
WHERE users.username='joe'
or tempusers.username='joe'
但是,我强烈建议在这里使用适当的连接。此查询将非常缓慢且繁琐。Ken White的答案非常明确(应该是公认的答案)-我发布这篇文章只是为了帮助您更清楚地理解初始错误(dbms无法区分您引用的是哪个表的username列,并且不能在一条语句中同时引用这两个列).这可能会解决错误,并帮助您思考错误发生的原因:
SELECT *
FROM users, tempusers
WHERE users.username='joe'
or tempusers.username='joe'
但是,我强烈建议在这里使用适当的连接。此查询将非常缓慢且繁琐。Ken White的答案非常准确(应该是公认的答案)-我发布这篇文章只是为了帮助您更清楚地理解初始错误(dbms无法区分您所引用的表的用户名列,并且不能在一条语句中同时引用这两个列)。可能是“用户名”是含糊不清的,尝试从用户u和临时用户t中选择*其中u.username='joe'或t.username='joe'这也会产生一个#1064错误。从用户u中选择*其中u.username='joe'联合选择*从临时用户t中选择t.username='joe'可能是'username'是含糊不清的,尝试从用户u和tempusers t中选择*其中u.username='joe'或t.username='joe'这也会产生一个#1064错误。从用户u中选择*其中u.username='joe'联合选择*从tempusers t中选择t.username='joe'在本例中,因为tempusers比用户多了一列,我可能最好运行两个独立的查询?不一定。(顺便说一句,这正是您在询问有关SQL的问题时应列出数据库架构的原因。我们没有您在问题中未提供的信息。)您可以在第一次选择中显式指定列名,只列出常见的列名,或者在这两个选项中都指定,然后添加一个空的“填充符”缺少一个匹配列的表的列。我已更新以反映您添加的新架构定义并处理不匹配的列列表。因此,在这种情况下,由于tempusers比users多了一列,因此我可能最好运行两个单独的查询?不一定。(顺便说一句,这正是您在询问有关SQL的问题时应列出数据库架构的原因。我们没有您在问题中未提供的信息。)您可以在第一次选择中显式指定列名,只列出常见的列名,或者在这两个选项中都指定,然后添加一个空的“填充符”缺少一个匹配列的表的列。我已更新以反映您添加的新架构定义并处理不匹配列列表。