我有3张桌子;
饮料
食物
饮料
饮料tbl通过RestID加入餐厅,食品tbl通过RestID加入餐厅
我正在尝试创建一个执行以下操作的查询;
我正在尝试创建一个查询,以检查Drinks表的drinkvariety
和drinkname
列中输入的饮料是否都是LIKE文本,并检查{{1 }}和foodcategory
。仅当查询输入的占位符为“任一列”时,餐厅才会返回结果。
我尝试使用此查询创建此查询,但是语法必须错误,因为它不会按预期返回;
foodname
注意:上面目前仅检查每个表1列。我知道,但这仍然行不通。
任何帮助将不胜感激。
答案 0 :(得分:1)
您不得在查询中的带引号的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中搜索文字问号?
答案 1 :(得分:0)
使用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('%', ?, '%')
) ;