Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите с запросом из двух таблиц / 6 сообщений из 6, страница 1 из 1
18.10.2018, 06:37
    #39719158
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с запросом из двух таблиц
Всем привет,

Есть две связанные таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
hometasks
  ht_id int(11) NOT NULL AUTO_INCREMENT,
  ht_cli_type int(11),
  ...
  ht_date date DEFAULT NULL

ht_parts (
  htp_id int(11) NOT NULL AUTO_INCREMENT,
  ...
  htp_ht_id int(11),
  htp_mat_id int(11)

FOREIGN KEY (htp_ht_id)
REFERENCES hometasks (ht_id)



Нужно выбрать максимальную дату из первой таблицы для каждого htp_mat_id из второй.

Методом научного тыка у меня получился запрос

Код: sql
1.
SELECT MAX(ht_date), htp_mat_id FROM hometasks, ht_parts WHERE ht_id = htp_ht_id AND ht_cli_type = 10 GROUP BY htp_mat_id;



Это правильный запрос или нужно делать по другому?

Спасибо
...
Рейтинг: 0 / 0
18.10.2018, 06:56
    #39719161
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с запросом из двух таблиц
...
Рейтинг: 0 / 0
18.10.2018, 07:19
    #39719164
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с запросом из двух таблиц
Щукина Аннаsavsoft,

На "почитать"

Читал, но не один вариант мне не подходит. Там логика сложнее.
...
Рейтинг: 0 / 0
18.10.2018, 07:40
    #39719168
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с запросом из двух таблиц
savsoftМетодом научного тыка у меня получился запрос
Код: sql
1.
SELECT MAX(ht_date), htp_mat_id FROM hometasks, ht_parts WHERE ht_id = htp_ht_id AND ht_cli_type = 10 GROUP BY htp_mat_id;

Это правильный запрос или нужно делать по другому?
Запрос верен, хотя для строгости нужно бы для КАЖДОГО поля указывать алиас таблицы (невзирая на префиксы имён). Т.е.
Код: sql
1.
2.
3.
4.
5.
SELECT MAX(ht.ht_date), htp.htp_mat_id 
FROM hometasks ht, ht_parts htp
WHERE ht.ht_id = htp.htp_ht_id 
  AND ht.ht_cli_type = 10 
GROUP BY htp.htp_mat_id;

Впрочем, есть тонкость. Формально структура не запрещает записи в ht_parts, не имеющие референса в hometasks (поле htp_ht_id не описано как NOT NULL), т.е. возможны записи, которые не будут показаны в итоговом запросе. Если такие записи есть, и они нужны в выводе, следует заменить картезианку на ht_parts LEFT JOIN hometasks .

savsoftЧитал, но не один вариант мне не подходит.Хреново читал. С формальной точки зрения - все подходят, пусть и решают более общую задачу. Другое дело, что у тебя лишь частный вариант - нет задачи получить иные поля, кроме собственно группы и даты. Потому построенного тобой запроса достаточно.
...
Рейтинг: 0 / 0
18.10.2018, 07:54
    #39719176
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с запросом из двух таблиц
Akina
savsoftЧитал, но не один вариант мне не подходит.Хреново читал. С формальной точки зрения - все подходят, пусть и решают более общую задачу. Другое дело, что у тебя лишь частный вариант - нет задачи получить иные поля, кроме собственно группы и даты. Потому построенного тобой запроса достаточно.

Да, мне нужна только самая свежая дата для каждого ид материала. А с более общими случаями буду разбираться.

Спасибо.
...
Рейтинг: 0 / 0
31.10.2018, 15:31
    #39725911
delina
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите с запросом из двух таблиц
Ребят, привет, помогите пож-та, что здесь не так у меня с FOREIGN KEY (chief_id) REFERENCES employee(id), строки не вставляются

#DROP DATABASE employees;



CREATE DATABASE employees;



USE employees;



CREATE TABLE department

(

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(50) NOT NULL

);



CREATE TABLE employee

(

id INT AUTO_INCREMENT PRIMARY KEY,

name VARCHAR(50) NOT NULL,

salary INT,

department_id INT NOT NULL,

chief_id INT,

FOREIGN KEY (department_id) REFERENCES department(id),

FOREIGN KEY (chief_id) REFERENCES employee(id)

);



INSERT INTO department (name)

VALUES ('Бухгалтерия'), ('Кадры'), ('Администрация');



INSERT INTO employee (name, salary, department_id, chief_id)

VALUES ('Сорокин Н.П.', 25000, 2, 2),

('Соколов И.И.', 37000, 2, NULL),

('Кошкина Т.Т.', 36000, 1, 5),

('Попов И.Т.', 74000, 3, NULL),

('Маркова И.А.', 66000, 1, NULL),

('Жаркова Е.Е.', 34000, 3, 4),

('Ким Д.О.', 81000, 3, 4);
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите с запросом из двух таблиц / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]