2016-07-19 4 views
0

У меня проблема с запросом в mysql. Я сделал 2 таблицы, таблицы1 и таблицу 2. В таблице 1 есть 2 строки данных, то же самое в таблице2, где у него есть 2 строки данных, и каждая таблица имеет 3 поля. В этом случае, я хочу, чтобы сделать вид, и это запрос:Это ошибка? Или ошибка? Или неправильный запрос?

create view point as select table2.field2 from table1, table2; 

Я думаю, что он будет показывать данные в table2, где есть 2 строки данных. Но результат показывает 4 строки данных, где каждые 2 строки являются одними и теми же данными. Когда я пытаюсь удалить 1 строку в таблице1, ее средние данные удалить 1, и я попробую ввести запрос, как указано выше. Результат верен, и он показывает 2 строки данных в таблице2. Почему это правильно, когда в таблице 1 есть 1 строка данных, и didnt, когда table1 имеют 2 строки данных. Пожалуйста, как это решить? Или его неправильный запрос.

+0

У вас нет условий соединения в разделе 'from' или' where'. По существу, то, что вы выполняете, является декартовым объединением, где строка будет отображаться для каждой строки в каждой другой таблице в вашем предложении 'from'. По сути, ваше видение - это 2 строки * 1 строки = 2 строки. 2 строки * 2 строки = 4 строки. Вам нужно добавить условие соединения для ваших таблиц, например, связывание первичного ключа с внешним ключом. – Rook

+0

Спасибо прежде. Теперь я знаю, когда вы показываете счет, как ваш пример выше. Но на самом деле, у моих 2 таблиц нет никакого условия для связи. Я просто хочу принимать значения в таблицах2 и table1 с результатом в новом представлении всякий раз, когда это новое поле. Теперь я помню, что при использовании представления должно существовать соотношение между двумя таблицами и более. Слава Руке. –

ответ

0

Вы используете implicit cross join между этими двумя таблицами.

Скажем, table1 имеет m ряды и table2 имеет n ряды.

Тогда

SELECT * FROM table1,table2вернет m*n строки.

приведенный выше запрос эквивалентен следующему:

SELECT * FROM table1 CROSS JOIN table2.

Если вы хотите получить все строки от table1 и table2, имея в виду, что я не хочу дубликатов, вам необходимо использовать UNION.

Таким образом, вы могли бы искать для этого запроса:

CREATE VIEW point AS 
SELECT table2.field2 from table2 
UNION 
SELECT table1.field2 from table1 

Примечание:

Если вы хотите разрешить повторяющиеся значения в вашем окончательном наборе результатов используйте UNION ALL вместо UNION, как показано ниже:

CREATE VIEW point AS 
SELECT table2.field2 from table2 
UNION ALL 
SELECT table1.field2 from table1 
+0

Я пытался это сделать, но объединение объединяет 2 метода выбора как один метод выбора и игнорирует несколько записей. –

+0

yes 'UNION' фактически объединяет результаты, вытекающие из этих двух отдельных запросов, удаляя дубликаты. На всякий случай, если вы хотите разрешить дубликаты, вместо этого используйте 'UNION ALL'. – 1000111

Смежные вопросы