2015-09-23 2 views
-1

Это должен быть SQL 101, но я чего-то не хватает.SQL 1-многие не возвращают все записи

У меня есть 2 стола. Вопросы и ответы (4 возможных ответа на каждый вопрос). Попытка написать запрос, который возвращает каждый вопрос с каждым возможным ответом на этот вопрос. Вот как выглядят 2 таблицы (усеченные).

+---+--------------+ 
| X | Question  | 
+---+--------------+ 
| 1 | A lesion is | 
| 2 | A linear acc | 
| 3 | A patient wi | 
| 4 | A small tumo | 
+---+--------------+ 

+---+--------------+-----+ 
| X | Answer  | Crt | 
+---+--------------+-----+ 
| 1 | 12 MeV  | Yes | 
| 1 | 9 MeV  | No | 
| 1 | 6 MeV  | No | 
| 1 | 16 MeV  | No | 
| 2 | 6 MeV  | Yes | 
| 2 | 5 MeV  | No | 
| 2 | 12 MeV  | No | 
| 2 | 20 MeV  | No | 
| 3 | Prostate siz | Yes | 
| 3 | T1-T2a  | No | 
| 3 | Gleason scor | No | 
| 3 | PSA <10  | No | 
| 4 | contains few | Yes | 
| 4 | contains a h | No | 
| 4 | is easier to | No | 
| 4 | is more easi | No | 
+---+--------------+-----+ 

Вот что я пытаюсь получить, набрав на X

+---+--------------+--------------+-----+ 
| X | Question  | Answer  | Crt | 
+---+--------------+--------------+-----+ 
| 1 | A lesion is | 12 MeV  | Yes | 
| 1 | A lesion is | 9 MeV  | No | 
| 1 | A lesion is | 6 MeV  | No | 
| 1 | A lesion is | 16 MeV  | No | 
| 2 | A linear acc | 6 MeV  | Yes | 
| 2 | A linear acc | 5 MeV  | No | 
| 2 | A linear acc | 12 MeV  | No | 
| 2 | A linear acc | 20 MeV  | No | 
| 3 | A patient wi | Prostate siz | Yes | 
| 3 | A patient wi | T1-T2a  | No | 
| 3 | A patient wi | Gleason scor | No | 
| 3 | A patient wi | PSA <10  | No | 
| 4 | A small tumo | contains few | Yes | 
| 4 | A small tumo | contains a h | No | 
| 4 | A small tumo | is easier to | No | 
| 4 | A small tumo | is more easi | No | 
+---+--------------+--------------+-----+ 

Это прекрасно работает в Access.
Но в MySQL (5.6) Я получаю

+---+--------------+--------------+-----+ 
| X | Question  | Answer  | Crt | 
+---+--------------+--------------+-----+ 
| 1 | A lesion is | 12 MeV  | Yes | 
| 2 | A linear acc | 6 MeV  | Yes | 
| 3 | A patient wi | Prostate siz | Yes | 
| 4 | A small tumo | contains few | Yes | 
+---+--------------+--------------+-----+ 

Вот запрос я использовал.

SELECT Questions.X, Questions.Question, Answers.Answer, Answers.Correct 
FROM Questions LEFT JOIN Answers ON Questions.X = Answers.X; 

Я также попытался INNER JOIN, RIGHT JOIN, LEFT OUTER JOIN, & RIGHT OUTER JOIN, все с теми же результатами.

Я работаю с различными базами данных так долго, похоже, что он должен работать. И я не знаю никаких различий между Access и MySQL, которые будут учитывать это.

Пожалуйста, что я делаю неправильно?

+1

Это прекрасно работает в SQLite (я слишком ленив, чтобы развернуть MySQL). Столбцы в вашем запросе не соответствуют столбцам в ваших данных. Например, 'Questions.Idx' vs' Questions.X'. Вы показываете нам фактические данные, запрос и результаты? – Schwern

+1

Вы уверены, что в этом запросе нет 'GROUP BY X'? – Uueerdo

+4

При первом взгляде ничего не кажется неправильным. Попробуйте воссоздать это в SQLFiddle. Вы, вероятно, не показываете нам всю картину. – sstan

ответ

2

Для таблиц и данных, которые вы показали нам, your query works. Проблема заключается не в вашем запросе, это что-то еще, что вы не показываете нам.

Время отладки.

Вы уверены Ваши таблицы содержат данные, которые, по вашему мнению, они делают?

Простой способ проверки: SELECT * FROM questions и SELECT * FROM answers.

Вы уверены У вас есть запрос на правильную базу данных?

Возможно, вы проверяете таблицы в оболочке SQL, но выполняете запрос через программу? Обязательно выполняйте обе операции с одним и тем же интерфейсом.

Вы уверены, что используете ?

Вы уже разместили сломанный запрос один раз. Возможно, вы не используете то, что, по-вашему, работаете.

Вы вводили этот запрос в оболочку? Или он создается и выполняется через какую-то программу? Если это последний, проверьте его в оболочке и распечатайте полный запрос из программы. Вы также можете проверить журнал запросов MySQL.

Вы уверены Ваша схема - это то, что вы думаете об этом?

Запуск DESCRIBE questions и DESCRIBE answers, чтобы проверить, нет ли смешного в определении таблиц.

+1

Принято? Кто это был? – Schwern

+1

ОК, вот в чем проблема. Данные в Access все не были скопированы в MySQL (это другая проблема. Поэтому мой запрос работал, у меня были неполные данные. Я думал, что схожу с ума !. –