1

実行したいクエリに対する答えを見つけるのに苦労しています。したい

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

両方のテーブルには、usernameという名前の列があります。SQL 1064構文エラーが発生し続けますが、これはあまり役に立ちません。

DB構造:

DB名:mydb

:ユーザー :ID、ユーザー名、電子メール、パスワード。

:tempusers :id、ユーザー名、電子メール、パスワード、アクティベーションコード。

4

2 に答える 2

6

発生するエラーは、から選択できないためですtable1 AND table2。これは通常、有効なSQL構文ではありません。(MySQLには、他のほとんどのデータベースでは使用されない独自の構文があるため、「通常」と言います。)

JOINテーブル間のそのような関係を説明していないため、aが機能するようには見えません。

これは、両方のテーブルがまったく同じ構造(列の名前とタイプ、および同じ数の列)を持っている場合に機能するはずです。

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は、列に適切なタイプの値を使用する必要があります。activationcode0

于 2012-06-04T02:17:50.060 に答える
0

潜在的に、これはエラーを解決し、エラーが発生している理由を考えるのに役立ちます。

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

ただし、ここでは適切な結合を使用することを強くお勧めします。このクエリは遅く、面倒です。ケンホワイトの答えは強打です(そして間違いなく受け入れられるはずです)-私はあなたが最初のエラーをより明確に理解するのを助けるためにこれを投稿しているだけです(dbmsはあなたが参照しているテーブルのユーザー名列を区別することができず、できます ' 1つのステートメントで両方を参照してください)。

于 2012-06-04T03:08:44.300 に答える