|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Здравствуйте. У меня есть две таблицы. В них содержатся следующие данные vdubl (t1): NUM: 1 ADR: Адрес Date: Дата contracts (t2): NUM: 1 address: Адрес condt: Дата cform: Вид найма NUM: 1 address: Адрес condt: Другая Дата cform: Другой вид найма Мне нужно выбрать все строки таблицы t1, при этом добавить к каждой строке колонку cform из таблицы t2, но мне нужен самый новый cform по дате condt... Я пробовал JOIN: SELECT t2.cform,t1.ADR,t1.NUM,t1.Date FROM vdubl AS t1 JOIN contracts AS t2 ON t1.NUM=t2.NUM; Но джоин при таком запросе дублирует строку из таблицы t1 два раза, со всеми видами найма. Возможно, тут надо как то добавить условие, но у меня не получилось. Пробовал Subquery: SELECT ADR,NUM,DATE,(select cform from contracts where contracts.NUM=vdubl.NUM order by condt ASC limit 1) as 'Вид найма' from vdubl; Но такой запрос обрабатывается больше 10 минут... Подскажите, как мне правильно составить запрос чтоб получить нужные данные? Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 13:50 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
1) Укажите версию MySQL. 2) Создайте fiddle. Или хотя бы вместо хренпоймикакого формата описания выложите рабочие CREATE TABLE + INSERT INTO. А также дайте эталонный ответ для ИМЕННО ТАКИХ данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 14:09 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Сиволапый как мне правильно составить запрос чтоб получить нужные данные? Для любой версии (схематично) Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 14:12 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Таблица vdubl: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Таблица contracts: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Это две разные, независимые таблицы. Я хочу выбрать все колонки из таблицы vdubl, после выбрать колонку cform из таблицы contracts, по полю NUM. Т.е. NUM одинаковый в этих таблицах для записей с одинаковым адресом. Но дело в том, что в таблице contracts записей с нужным NUM может быть несколько, они отличны по дате. INSERT INTO независимый для каждой таблицы, таблицы были созданы 12 лет назад и с тех пор наполняются. Я руками добавил колонку NUM во вторую таблицу и заполнил её C# скриптом, сравнивая поле address и ADR (они совпадают частично, но с помощью like можно найти соответствие)... Версия MySQL - mysqld Ver 5.0.51a for Win32 on ia32 (Source distribution) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 14:48 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Akina выложите рабочие CREATE TABLE + INSERT INTO. Сиволапый mysqld Ver 5.0.51a ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 15:40 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
SELECT * FROM vdubl RIGHT JOIN Contracts ON vdubl.num=Contracts.num; Вместо символа * указываешь столбцы, которые хочешь вывести в запросе. В итоге, ты получишь записи из таблиц vdubl и Contracts, которые как бы связаны по полю num, а также все записи из таблицы Contracts, не связанные с таблицей vdubl. Для справки : INNER JOIN - пересечение записей 2-х таблиц; LEFT JOIN - все записи левой таблицы + пересечение записей 2-х таблиц; RIGHT JOIN - все записи правой таблицы + пересечение записей 2-х таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 15:47 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Muxaul990 , как это поможет выбрать ОДНУ самую новую запись из нескольких связанных? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2020, 16:54 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Akina, Спасибо. Ваш схематичный пример помог мне. Этот запрос выдает мне то, что нужно: SELECT t2.cform,t1.ADR AS 'Address', t1.DV AS 'Date', t1.NUM AS 'Number' FROM vdubl AS t1 JOIN contracts AS t2 ON t1.NUM=t2.NUM JOIN (Select t3.NUM, MAX(t3.condt) as mdate from contracts t3 group by t3.num) t4 ON (t2.NUM, t2.condt) = (t4.NUM, t4.mdate)" Но есть ещё один вопрос, в таблице vdubl 9000 строк, по запросу выше мне выдается только 6 тысяч строк, т.е. это те строки, в которых t1.NUM=t2.NUM. Но дело в том, что не все NUM в vdubl имеют пару в contracts. Как мне отобразить все 9 тысяч строк, т.е. строки у которых нет пары в contracts получили значение NULL в колонке t2.cform? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 06:38 |
|
Запрос из нескольких таблиц по условию
|
|||
---|---|---|---|
#18+
Сиволапый в таблице vdubl 9000 строк, по запросу выше мне выдается только 6 тысяч строк, т.е. это те строки, в которых t1.NUM=t2.NUM. Но дело в том, что не все NUM в vdubl имеют пару в contracts. Как мне отобразить все 9 тысяч строк, т.е. строки у которых нет пары в contracts получили значение NULL в колонке t2.cform? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2020, 07:19 |
|
|
start [/forum/topic.php?fid=47&fpage=26&tid=1828754]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 172ms |
0 / 0 |