Выборка из двух таблиц - MySQL (219700)
Формулировка задачи:
Добрый день!
Прошу помощи.
Есть две таблицы, одна с номерами телефонов и другими данными, вторая с ФИО и номерами телефонов. Сопоставляю таблицы по совпадению номеров и получаю ФИО номер другие_данные.
Но естественно если совпадений номеров в таблицах 1 и 2 нет, то ничего не выводится. Как вывести на печать данные по совпадению, и если совпадение нет вывести (абонент не существует)?.
пример:
Петр Иванов / +79651234556 / Данные_Какие_ТО
Абонент не существует / +79659871235 / Данные_Какие_ТО
SELECT addrbook.FIO, inbox.number, inbox.smsdate, inbox.text, inbox.id FROM inbox, addrbook WHERE inbox.number = addrbook.NUMBER AND DATE(smsdate)=DATE(now())
Решение задачи: «Выборка из двух таблиц»
textual
Листинг программы
SELECT addrbook.fio, inbox.number, inbox.smsdate, inbox.text, inbox.id FROM inbox LEFT OUTER JOIN addrbook ON inbox.number = addrbook.number WHERE DATE(smsdate)=DATE(now());
Объяснение кода листинга программы
В представленном коде происходит следующее:
- Выполняется запрос на выборку данных из двух таблиц:
addrbookиinbox. - В запросе участвуют следующие поля:
fioиз таблицыaddrbookиnumber,smsdate,text,idиз таблицыinbox. - Устанавливается условие для выборки:
WHERE DATE(smsdate)=DATE(now()), которое означает, что будут выбраны только те строки, у которых дата в полеsmsdateравна текущей дате. - Используется оператор
LEFT OUTER JOIN, чтобы объединить строки из двух таблиц по полюnumber, то есть будут выбраны все строки из таблицыinbox, и только те строки из таблицыaddrbook, у которых есть соответствие в таблицеinboxпо полюnumber. - Результатом запроса будет набор данных, содержащий выбранные поля:
fio,number,smsdate,text,id.