0

これは、交差を実行しようとしている MySQL の select ステートメントです。

SELECT id 
FROM
(SELECT id 
 FROM members WHERE id!=15 AND `last name` = `last name` AND (`first name` = "James") AND `email address` = `email address` AND `mobile number` = `mobile number` AND type_id = type_id AND active = active
) AS A

INNER JOIN

SELECT id 
FROM
(SELECT DISTINCT m.members_id as id 
 FROM map m 
 WHERE m.members_id!=15 AND (((SELECT count(*) FROM tasks) = 0) OR (((SELECT count(*) FROM checklist WHERE map_id=m.id) / (SELECT count(*) FROM tasks)) * 100 >= 0 AND ((SELECT count(*) FROM checklist WHERE map_id=m.id) / (SELECT count(*) FROM tasks)) * 100 <= 100)) AND m.`topic` = m.`topic` AND m.`location` = m.`location` AND m.`country` = m.`country` AND m.`city` = m.`city` AND m.`organization` = m.`organization`
) AS B

USING (id)

これは、私が見た交差コードの例です

SELECT DISTINCT value FROM table_a
INNER JOIN table_b
USING (value);

From: MySQL の Intersect の代替

ただし、「内部結合」の近くで構文エラーが発生します。ここで何が悪いのか誰か知っていますか?

4

1 に答える 1

1

いくつかのこと:

  1. あなたの Where 句は結合の後に来ます - これはおそらくあなたの問題です
  2. 使用しているフィールド名のいくつかで何が起こっているのか理解するのが難しい
  3. フォーマットを少し修正して他のアドバイスを提供しようとしていますが、それは読みにくいです。

クエリをテンプレートとして使用しているもののように見せるだけで、結果は次のようになると思います。

SELECT id 
FROM
(SELECT id 
 FROM members WHERE id!=15 AND `last name` = `last name` AND (`first name` = "James") AND `email address` = `email address` AND `mobile number` = `mobile number` AND type_id = type_id AND active = active
) AS A

INNER JOIN

(SELECT DISTINCT m.members_id as id 
 FROM map m 
 WHERE m.members_id!=15 AND (((SELECT count(*) FROM tasks) = 0) OR (((SELECT count(*) FROM checklist WHERE map_id=m.id) / (SELECT count(*) FROM tasks)) * 100 >= 0 AND ((SELECT count(*) FROM checklist WHERE map_id=m.id) / (SELECT count(*) FROM tasks)) * 100 <= 100)) AND m.`topic` = m.`topic` AND m.`location` = m.`location` AND m.`country` = m.`country` AND m.`city` = m.`city` AND m.`organization` = m.`organization`
) AS B

USING (id)

内部結合の後からその選択 ID を削除します。そうは言っても、クエリを単純化して、最初にそれが機能するかどうかを確認できます-サブセレクトに多くの条件付きロジックがあり、フィドルなどでテストするのが難しくなります。データとクエリ?

于 2013-09-02T23:46:53.327 に答える