SQL查询从表1和表2中选择?

时间:2012-06-04 02:14:31

标签: mysql sql

我很难找到我想要运行的查询的答案。我想

SELECT * FROM users AND tempusers WHERE username='joe'

两个表都有一个名为username的列。我一直受到SQL 1064语法错误的影响,这对我没有多大帮助。

数据库结构:

数据库名称:mydb

:用户 :ID,用户名,电子邮件,密码。

:tempusers :id,username,email,password,activationcode。

2 个答案:

答案 0 :(得分:6)

您收到的错误是因为您无法从table1 AND table2中选择;这通常不是有效的SQL语法。 (我说“通常”因为MySQL有一些大多数其他数据库不使用的专有语法。)

JOIN似乎不起作用,因为您没有描述表之间的那种关系。

如果两个表具有完全相同的结构(列名和类型以及相同的列数),这应该有效:

SELECT * FROM users WHERE username = 'joe'
UNION ALL
SELECT * FROM tempusers WHERE username = 'joe'

如果表格没有完全相同的架构,则必须至少在第一个表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'

您可能必须在第一个选择中为''提供空格代替activationcode,或者如果不是activationcode列,则使用适当类型的值字符列(例如,0表示整数列。)

答案 1 :(得分:0)

这可能会解决错误并帮助您思考错误发生的原因:

SELECT * 
FROM   users, tempusers 
WHERE  users.username='joe' 
       or tempusers.username='joe'

然而 - 我强烈建议您在此处使用正确的联接。这个查询会很慢,而且很麻烦。 Ken White的回答是肯定的(并且肯定应该是接受的) - 我只是发布这个来帮助您更清楚地理解初始错误(dbms无法区分您所指的哪个表的用户名列,并且可以' t在一个陈述中引用两者。)