powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите с запросом из двух таблиц
6 сообщений из 6, страница 1 из 1
Подскажите с запросом из двух таблиц
    #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
Подскажите с запросом из двух таблиц
    #39719161
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Подскажите с запросом из двух таблиц
    #39719164
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Щукина Аннаsavsoft,

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

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

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

Спасибо.
...
Рейтинг: 0 / 0
Подскажите с запросом из двух таблиц
    #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
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите с запросом из двух таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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