Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL 3.23:SELECT из двух таблиц с одинаковыми полями

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как это реализовать? Нашел эту тему:
http://forum.ru-board.com/topic.cgi?forum=31&topic=5455#1
но там речь о выборке их 2-х разных таблиц.
Итак, две таблицы имеют одинаковые поля field1, field2 и т.д.
Нужно выбрать значения из обех таблиц. В MySQL 4 это решается просто:
SELECT field1, field2 FROM table1 WHERE field3 = '1'
UNION
SELECT field1, field2 FROM table2 WHERE field3 = '1'
 
Как это сделать в одном-двух запросах в MySQL 3.23.55 используя JOIN?

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 18:52 03-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SELECT table1.field1 AS t1f1,table1.field2 AS t1f2 FROM table1 WHERE table1.field3='1'
...
Далее зависит от того, что ты хочешь, поскольку проблему ты не описал.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:00 03-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема заключается в выборке из двух разных таблиц значений соответствующих какому то критерию. При этом поля этих таблиц одинаковые.

Цитата:
SELECT table1.field1 AS t1f1,table1.field2 AS t1f2 FROM table1 WHERE table1.field3='1'  

В данном случае данные будут выбраны только из таблицы table1, а нужно чтобы еще и из table 2.
SELECT table1.field1 AS t1f1,table2.field2 AS t1f2 FROM table1,table2 WHERE table1.field3='1' не работает.

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 21:46 03-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yamb

Цитата:
Проблема заключается в выборке из двух разных таблиц значений соответствующих какому то критерию. При этом поля этих таблиц одинаковые.

не вижу проблемы.

Цитата:
В данном случае данные будут выбраны только из таблицы table1, а нужно чтобы еще и из table 2.  

ну так напиши, чтобы и из второй.

Цитата:
SELECT table1.field1 AS t1f1,table2.field2 AS t1f2 FROM table1,table2 WHERE table1.field3='1' не работает.

что не работает? ничего не возвращает? не верю.. ты же не указал требования для второй таблицы.
SELECT table1.field1 AS t1f1,table2.field2 AS t1f2 FROM table1,table2 WHERE table1.field3='1' AND table2.field3='1'

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:50 03-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В последнем случае когда используется AND возвращаются значения table1.field1 и table2.field2 но одни и те же значения возвращаются по нескольку раз, хотя в таблицах они записаны только один раз. Такое впечатление что что-то с чем-то начинает сочитаться, а вот по какому правилу понять не могу

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 00:41 04-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Yamb, такое ощущение что ты сам не знаешь чего хочешь, потому что если бы ты знал, что тебе нужно - ты бы
а) давно бы решил проблему
б) удосужился бы описать задачу

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 00:57 04-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM
Попробую описать задачу на более конкретном примере.
Names1 - таблица содержит поля First и Last.
First | Last
Коля | Петров
Ваня | Сидоров
Юля | Иванова
Names2 - таблица тоже содержит поля First и Last.
First | Last
Петя | Васин
Вася | Катин
Леня | Петров
 
Мне нужно написать запрос который бы выдал бы имена людей с одинаковой фамилией. В данном случае это Коля и Леня.

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 01:43 04-01-2005 | Исправлено: Yamb, 01:47 04-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У тебя явно БД не нормализована
SELECT t1.first as name1, t1.last as last, t2.first as name2 FROM names1 t1,names2 t2 WHERE t1.last=t2.last
Ну и далее отплясывай в зависимости от того, что тебе нужно - только на самом деле я бы на твоём месте занялся судя по всему пропущенным этапом проектирования БД. Если туго с SQL-теорией - можешь начать с Understanding SQL Мартина Грабера.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 01:52 04-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
У тебя явно БД не нормализована

Это потому что в базе есть две таблицы с одинаковыми полями?

Цитата:
SELECT t1.first as name1, t1.last as last, t2.first as name2 FROM names1 t1,names2 t2 WHERE t1.last=t2.last

Что такое t1 и t2? Названия таблиц? Таблицы называются names1 и names2.

Цитата:
Если туго с SQL-теорией - можешь начать с Understanding SQL Мартина Грабера.

За линк спасибо, это я читал.

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 16:33 04-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Это потому что в базе есть две таблицы с одинаковыми полями?
Это потому, что у тебя базы не нормализованы. Ума не приложу, зачем иметь ДВЕ таблицы с одинаковой смысловой нагрузкой.
Цитата:
Что такое t1 и t2? Названия таблиц? Таблицы называются names1 и names2.
Если не знаешь, что это - будь добр, хотя бы не неси чушь. Синтаксис оператора SELECT
Цитата:
это я читал
Читай ещё раз, пока не научишься создавать простейшие запросы.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 16:42 04-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Это потому, что у тебя базы не нормализованы. Ума не приложу, зачем иметь ДВЕ таблицы с одинаковой смысловой нагрузкой.

Каждая из таблиц имеет около сотни полей и несколько сот тысяч записей. Ее размер около полугигабайта. Если учесть что для того чтобы из таблицы был произведен поиск MySQL должен загрузить в память ее файл то становится очевидным, что хранить данные лучше в 10 таблицах а не в одной, поскольку размер одной большой таблицы был бы 5Гб в то время как размер памяти сервера всего 4 Гб. Кроме того, решается проблема переносимости, каждая таблица содержит данные за один квартал, чтобы эти данные получить нужно скопировать/удалить 3 файла и все.

Цитата:
Если не знаешь, что это - будь добр, хотя бы не неси чушь.

Насчет чуши - не хами и не переходи на личности, это не к лицу человеку претендующему на знание SQL Синтаксис оператора SELECT я знаю, и знаю неплохо. После FROM всегда идет table_references, в твоем запросе это "names1 t1,names2 t2", на мой взгляд это смысла не имеет. Поправь если не так.

Цитата:
Читай ещё раз, пока не научишься создавать простейшие запросы.

В том то и дело что запрос совсем непростой, был бы простой я бы здесь не задавал вопросов

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 18:36 05-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
для того чтобы из таблицы был произведен поиск MySQL должен загрузить в память ее файл ...  в то время как размер памяти сервера всего 4 Гб
Бредить перестаём и больше никогда не говорим о том, чего не знаем или не понимаем.
Цитата:
Кроме того, решается проблема переносимости, каждая таблица содержит данные за один квартал, чтобы эти данные получить нужно скопировать/удалить 3 файла и все.
Вам теорию надо учить, а не фигнёй заниматься. Теорию реляционных БД. Что такое нормализация БД вам напрочь неизвестно, отчего, похоже, и базы у вас такие якобы объёмистые (что-то мне с трудом верится, что нормальноспроектированная БД может СТОЛЬКО ЗАНИМАТЬ и работать).
Цитата:
Насчет чуши - не хами и не переходи на личности, это не к лицу человеку претендующему на знание SQL
По поводу плакаться - это иди к мамочке в жилетку - меня твои сопли не впечатляют.
Цитата:
Синтаксис оператора SELECT я знаю
Синтаксис - знает, читать - умеет, ссылки - игнорирует. Почему я тебе что-то должен доказывать, при чём - видное невооружённым глазом и очевидное? У меня что-ли проблемы с запросом?
Цитата:
В том то и дело что запрос совсем непростой
Это всё от каши в голове.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 18:57 05-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Бредить перестаём и больше никогда не говорим о том, чего не знаем или не понимаем.

Речь об этом.

Цитата:
MySQL provides in-memory Heap tables for applications in which you need incredibly fast access to data that either never changes or doesn’t need to persist after a restart. Using a Heap table means that a query can complete without even waiting for disk I/O. This makes sense for lookup or mapping tables, such as area code to city/state name, or for caching the results of periodically aggregated data.


Цитата:
что-то мне с трудом верится, что нормальноспроектированная БД может СТОЛЬКО ЗАНИМАТЬ и работать

Занимает и работает.

Цитата:
По поводу плакаться

Это все лирика, давай по существу.

Цитата:
Почему я тебе что-то должен доказывать

Не нужно ничего доказывать, просто ты привел запрос, может он 1000 раз правильный но я не понял, распиши что в нем где
t1 - это то то;
t2 - это то то;
names1 - это то то;
names2 - это то то;
Все, больше ничего не нужно. Вот цитирую сам запрос.

Цитата:
SELECT t1.first as name1, t1.last as last, t2.first as name2 FROM names1 t1,names2 t2 WHERE t1.last=t2.last

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 20:47 05-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
я не понял
Ну вот, это другой разговор - при чём я сразу тебя об этом предупреждал. Сылка значит прочитана не была или была непонята? Ок, цитирую
Цитата:
Выражение FROM table_references задает таблицы, из которых надлежит извлекать строки. ... Для каждой заданной таблицы по желанию можно указать псевдоним.  
table_name [[AS] alias] ...
Что такое псевдоним? Это выдумка для ленивых - лень мне постоянно писать table_name - я даю ему алиас (alias), и в дальнейшем вместо длинного table_name могу писать уже просто alias. Вот, собственно, и всё. В данном случае получается t1 алиас names1, а t2 - соответственно names2. Фактически вышеотквоченное то же самое, что
Цитата:
SELECT names1.first as name1, names1.last as last, names2.first as name2 FROM names1,names2 WHERE names1.last=names1.last
PS: по поводу первого, надеюсь, комментарии излишни? Достаточно воспользоваться словарём. Что же касается таблиц - по идее это должно было выглядеть так:
lasts: id value
names: id value
users: id last_id name_id date <other properties>
Никакой проблемы переносимости данных за квартал и любой другой период времени, в общем-то, нет. И запрос бы выглядел как-то так: SELECT n.value AS name,l.value AS last FROM users u,names n, lasts s WHERE n.id=u.name_id AND l.id=u.last_id GROUP BY u.last_id ORDER BY u.last_id

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:00 05-01-2005 | Исправлено: SiMM, 21:02 05-01-2005
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Все, теперь понятно что имелось в виду, большое спасибо!

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 21:52 05-01-2005
IgorXaoc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SELECT names1.first as name1, names1.last as last, names2.first as name2 FROM names1,names2 WHERE names1.last=names1.last
 
Я в шоке. Делаем алисы name1, last, name2, которые затем не используются.

Всего записей: 1 | Зарегистр. 30-09-2014 | Отправлено: 10:36 30-09-2014
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IgorXaoc

Цитата:
Я в шоке. Делаем алисы name1, last, name2, которые затем не используются.

меньше кушайте шоколада, не обляпаетесь.
1) смотрим на дату сообщения
2) алиасы могут использоваться при выборке результатов запроса (например в php, тогда получаются более удобные ассоциативные массивы)

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 10:41 30-09-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySQL 3.23:SELECT из двух таблиц с одинаковыми полями


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru