SQL - Использование заполнителей для извлечения строк, которые похожи на заполнители - PullRequest
0 голосов
/ 04 марта 2019

у меня 3 таблицы;

Напитки

Restaurant

Еда

Food

Напитки

Drinks

Напиток tbl присоединен к Ресторану через RestID, FoodTBL присоединен к Ресторану через RestID

Я пытаюсь создать запрос, который выполняет следующие действия:

  • Пользователь вводит еду, которую он хотел бы (например, Burger)
  • Вводимые пользователем напитки пьют, как им хотелось бы (например, Гиннес)
  • Запрос возвращает ресторан, который обслуживает оба этих элемента

Я пытаюсь создать запрос, который проверяет, нравится ли введенный напитоктекст в столбцах drinkvariety & drinkname таблицы Drinks, который проверяет, является ли введенная еда LIKE текстом в foodcategory и foodname таблицы Food.Только когда заполненные запросом заполнители имеют значение LIKE для любого столбца, ресторан будет возвращаться в качестве результата.

Я пытался создать этот запрос с помощью этого, но синтаксис должен быть неправильным, поскольку он не возвращает желаемый результат;

SELECT DISTINCT r.restname
FROM restaurants r
JOIN food f ON f.restid = r.restid
JOIN drinks d ON d.restid = r.restid
WHERE f.foodcategory LIKE '%?%'
  AND d.drinkvariety LIKE '%?%'

Примечание: на данный момент выше проверяется только 1 столбец на таблицу.Я знаю, но это все еще не работает.

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Использование exists:

SELECT r.restname
FROM restaurants r
WHERE EXISTS (SELECT 1
              FROM food f 
              WHERE f.restid = r.restid AND
                     f.foodcategory LIKE CONCAT('%', ?, '%')
             ) AND
      EXISTS (SELECT 1
              FROM drinks d
              WHERE d.restid = r.restid AND
                    d.drinkcategory LIKE CONCAT('%', ?, '%')
             ) ;
0 голосов
/ 04 марта 2019

Запрещается помещать заполнители параметра ? в строковые литералы SQL в кавычках в вашем запросе.Параметры являются альтернативой использованию строковых литералов.

Я бы написал запрос следующим образом:

SELECT DISTINCT r.restname
FROM restaurants r
JOIN food f ON f.restid = r.restid
JOIN drinks d ON d.restid = r.restid
WHERE f.foodcategory LIKE ?
AND d.drinkvariety LIKE ?

Затем я передал бы параметры в виде строк после добавления и добавления «%» к строкеПеременная в моем приложении.

Альтернатива: добавить и добавить подстановочный знак в SQL, но оставить заполнитель параметра отдельно.

SELECT DISTINCT r.restname
FROM restaurants r
JOIN food f ON f.restid = r.restid
JOIN drinks d ON d.restid = r.restid
WHERE f.foodcategory LIKE CONCAT('%', ?, '%')
AND d.drinkvariety LIKE CONCAT('%', ?, '%')

При любом решении заполнитель по-прежнему не должен находиться внутри строкового литерала SQL.

Иначе как бы вы искали буквальный вопросительный знак в SQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...