Автор Milo Ulianova задал вопрос в разделе Другие языки и технологии
помогите создать запрос в SQL! и получил лучший ответ
Ответ от Jaded Phoenix[гуру]
SELECT
Master.MasterName, Price.Discount, Interior.Hall, Service.Service
FROM
Master LEFT JOIN Service ON Master.Id=Service.Master LEFT JOIN Price ON Price.Service=Service.Id LEFT JOIN Interior ON Interior.Service=Price.Id
Service, Price, Master, Interior
WHERE
( Price.Discount NOT LIKE "*Нет*" AND Interior.Hall LIKE "*Женский зал*")
Это я подразумеваю, что у тебя во всех таблицах есть поле Id, определяющее ключ записи, и таблицы ссылаются друг на друга (Master -> Service -> Price -> Interior). То есть: мастер оказывает услугу, которой заданы цена и скидки, которые могут быть разными для разных залов.
В кратце же, это задание на LEFT JOIN. А у тебя запрос - выбрать все записи во всех возможных сочетаниях. Вот SQL и старался... .
P.S. В Access (а картинка твоя оттуда, да? ) есть ОЧЕНЬ простой построитель запросов. Используй его, всё будет не сложно.
хаха 🙂 => и если можно, не пишите всяких офигенно заумных пограммерских слов Нет так не честно. Как так! ? Игра не по правилам => НО результатов у меня получилось больше 100 тысяч, Для этого есть оператор LIMIT который ограничивает количество возращаемых строк (ставится в конце выражения) => то есть буквально, строки дублируются раз по 200 каждая, И кстати для этого тоже есть оператор DISTINCT - означает что нужно выбрать только те строки содержание КОТОРЫХ НЕ ПОВТОРЯЕТСЯ короче, запрос будет выглядеть вот так: SELECT DISTINCT Master.MasterName, Price.Discount, Interior.Hall, Service.Service FROM Service, Price, Master, Interior WHERE ( Price.Discount NOT LIKE "*Нет*" AND Interior.Hall LIKE "*Женский зал*") LIMIT 20 LIMIT 20 - значит вернет ровно 20 строк, напишите 5 вместо 20 - вернет 5 строк, то есть подставьте вместо 20 кол-во строк которые хотите получить в ответ. Старайтесь избегать JOIN'ов когда таблица очень большая. Это создает нагрузку нагрузку на сервер и СУБД сканирует всю таблицу - что само по себе не очень хорошо. Натуральные JOIN'ы предназначены для получение ОДНОГО результата с нескольких таблиц за один раз. И кстати, на W3Schools есть ооочень ооочень очееень отличное введение в SQL где все очень просто расписано со всеми примерами и обьяснениями.
Дело в том, что выбор из двух таблиц без условия связи этих таблиц приводит к тому, что каждая запись первой таблицы сочетается с каждой записью второй таблицы. Вот и получаются те сотни тысяч результатов. И, конечно же, никакой LIMIT тут не поможет. Другими словами, без условия связи выводится таблица, в которой каждому сервису поставлен в соответствие каждый мастер. А ведь нужен только тот мастер, который указан для этого сервиса. Поэтому в обязательном порядке должны быть условия типа Service.Service_MasterFK = Master.MasterID. В принципе не важно, где эти условия указывать: в JOIN или непосредственно в WHERE. Вот только LEFT JOIN тут не подходит, надо использовать INNER JOIN, ведь если у сервиса нет, например, мастера, то и не нужен нам такой сервис. (Даже если такая ситуация и невозможна из-за ограничений в таблицах, всё равно стоит сразу же приучаться использовать правильный тип JOIN.) Ну а если с JOIN не хочется связываться, то запрос может выглядеть так (обрати внимание на таблицу SPA: она необходима для связи между Service и Interior): SELECT DISTINCT Master.MasterName, Price.Discount, Interior.Hall, Service.Service FROM Service, Price, Master, SPA, Interior WHERE (Service.Service_PriceFK = Price.PriceID AND Service.Service_MasterFK = Master.MasterID AND Service.ServiceID = SPA.Spa_ServiceFK AND SPA.SPA_InteriorFK = Interior.InteriorID AND Price.Discount NOT LIKE "*Нет*" AND Interior.Hall LIKE "*Женский зал*") Параметр DISTINCT необходим на тот случай, если одна и та же услуга оказывается в одном и том же зале несколько раз (например, в среду и пятницу) , судя по схеме данных, такая ситуация возможна.
Creation Master 11 {Beta 2} как пользоваться?
pen select lan.db
выбираешь русскую базу данных
подробнее...
Сзади у винчестера три положения перемычек. Что такое "Master" я знаю, а что означают "SLAVE" и "CABLE SELECT"
"Master" и "SLAVE" - Это если два устройства на канале. Должны быть разные.
"CABLE SELECT" -
подробнее...
Master и Slave разъема Mode?
сделали Вы правильно.
Если я правильно понимаю, то у вас IDE-шный Сидюк.
На каждом
подробнее...
Что означают переключатели (вставки) на задней панели дисковода: "MASTER", "SLAVE", "CSEL". Какие они задают параметры?
"оптимального" там нет - все зависит от того, как вы подключаете устройства
Если к одному
подробнее...
Подскажите пожалуйста!У меня перед загрузкой Windows пишет такой бред:Reboot and Select proper Bott device or Insert Boo
Перезагрузитесь и выберите правильное загрузочное устройство или вставьте загрузочный носитель в
подробнее...
master, slave, Cable Select что это означает??? (пишется на dvdcdromah и hdd)
Означает как ты его подключаешь к стандартному разъему контроллера IDE. можно подключить два винта
подробнее...
Какой максимальный груз можно кидать на шнуре Select Master PE 0.06 мм 9 кг (3.кг реально)?
Катушку хорошую возьми для начала, с хорошей укладкой, шнур получше (более скользкий) и палочку
подробнее...
Кто настраивает гитару на лирический лад? (фото)
#yaimg88170#
Источник: Добрый
подробнее...
Какой куллер нужен для разгона Intel Core i7-3770K Ivy Bridge с 3500MHz до 4500MHz?
Попробуй корсаровский водяной комплект неразборный, и цена не испугает (2500-3500) и
подробнее...
Напишите текст итальянской песни "Luna tu" русскими буквами. (текст внутри)
Луна ту -Luna tu
Куанти соно и канти кэ ай аскольтато джа - Quanti sono i canti che hai
подробнее...
Как сделать жесткий диск slave-ом
Cap Limit - это не слэйв!
Надо их поставить на один шлейф, причем maxtor на конец (и лучше на
подробнее...