Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 要从表1和表2中选择的SQL查询?_Mysql_Sql - Fatal编程技术网

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的问题时应列出数据库架构的原因。我们没有您在问题中未提供的信息。)您可以在第一次选择中显式指定列名,只列出常见的列名,或者在这两个选项中都指定,然后添加一个空的“填充符”缺少一个匹配列的表的列。我已更新以反映您添加的新架构定义并处理不匹配列列表。