2016-05-27 5 views
0

2つのテーブルの「選択された」列の間にCROSS JOINを作成しようとしています 例:表1(a、b、c) 、B、D) 私は各テーブルからabを選択し、それらに参加したいが、私はこのエラーを取得しておいてください。私はすべての派生テーブルに名前を付ける必要があるため、これは知っているMySQLのCROSS JOIN:すべての派生テーブルには独自のエイリアスが必要です

Every derived table must have its own alias 

が、私はまだ問題が何であるか、オンラインで検索した後でも問題を解決する方法を理解できません。これは、クエリです:

SELECT (x.targetNumber, x.name, x.lat, x.lng) 
FROM ((SELECT (u.name, u.targetNumber, u.password) 
      FROM Users AS u WHERE 'target' = u.type) 
      CROSS JOIN 
      (SELECT (l.targetNumber, l.password, l.lat, l.lng) FROM Location AS l) 
      WHERE (u.targetNumber = l.targetNumber AND u.password = l.password)) AS x; 
+0

2行目の末尾にエイリアスを追加する必要があります( 'FROM Location AS l 'のようなものです)。そして、 'cross join'の前に。そして、おそらく私が見落とした他の場所... – Solarflare

+0

@Jocelynそれは重複していますが、依然として私のクエリで問題を見つけることができません。 – MuhammadNe

+0

'" MYSQLでクロスジョインのクエリをしようとしています " - あなたはいません。あなたは 'CROSS JOIN'というキーワードで難読化しようとする内部結合をしようとしています。クロスジョインとは、条件なしでテーブルを結合し、すべての組み合わせを取得することを意味します。しかし、あなたの結合基準は単にWHERE節に隠されています。だからあなたは本当に*達成したいことは何ですか? (これらのカッコはすべて混乱してエラーを見つけにくくなります。実際には最初の派生テーブルにエイリアス名を与えていません。 –

答えて

2

これまでのところ、あなたのクエリがこのことになっているようです。そうすることで、クエリを完全に読めなくなり、エラーが発生します。

ご覧のとおり、クロスジョインはありません。 2つのデータセットのすべての可能な組み合わせを取得することを求めているわけではありません。

とにかくこれはSQLの仕組みではありません。あなたは、DBMS に何を行うかを問うstraigh-forwardというクエリを書く必要があります。 DBMSはの処理方法をと決定します。

+0

答えをありがとう、それはこのように動作し、かっこが問題を起こしていました。テーブルを結合する構文が間違っていました。しかし、私は実際には2つのテーブルを結合するのではなく、すべての組み合わせを取得したいので、「クロス結合」ではなく「結合」で使用します。 – MuhammadNe

1

短い答えはちょうどasの前でとサブクエリの選択リストからエイリアスを削除するにはFROM Location AS l)後に右から閉じる括弧を移動することです:

...(SELECT targetNumber, password, lat, lng FROM Location) AS l... 

少し長い答え:私は、from句にサブクエリがある理由を全く理解していません。これらの2つのテーブルを単純に結合することができます。あなたは最高のを検討し、いくつかの実行計画に従うようにDBMSを強制的にいくつかのトリックを適用すること

select u.targetnumber, u.name, l.lat, l.lng 
from users u 
join location l on l.targetNumber = u.targetNumber and l.password = u.password 
where u.type = 'target'; 

のみ:

+0

これは構文エラーです。チェックしましたか?それは私がそれを好きにした理由は、2つの大きなテーブルに参加したくないからです。 – MuhammadNe

+0

sqlはテーブルのすべての行を結合の一部であるという理由だけで検索しません。そして、私はあなたが試した質問やあなたが持っているエラーメッセージが何もわからないので、あなたが持っている後続の構文エラーについてはコメントできません。 – Shadow

関連する問題