我目前正在尝试创建一个查询,如果一个字段包含多个值,我想要选择行。我想生病只是举个例子:
数据库:field =" Ground; Lava; Rocks"
查询应该是:选择字段包含的位置"地面"和" Rocks"。
我的第一次尝试是:
SELECT * FROM TerrainLayer WHERE tags LIKE '%Ground%' AND tags LIKE '%Rocks%';
这是一个可接受的解决方案还是更好(更有效)的方法来实现这一目标?提前感谢您的帮助。
答案 0 :(得分:2)
这样的事情也应该有用,如果你有多个LIKE子句应该更高效:
SQL
CREATE TABLE #SearchItem (Search varchar(255))
INSERT INTO #SearchItem VALUES
('Ground'),
('Rocks'),
('Whatever')
SELECT *
FROM TerrainLayer as t
JOIN #SearchItem as s
ON t.tags COLLATE DATABASE_DEFAULT LIKE '% ' + s.Search + ' %'
对于SQLite
CREATE TABLE SearchItem (Search varchar(255))
INSERT INTO SearchItem VALUES
('Ground'),
('Rocks'),
('Whatever')
SELECT *
FROM TerrainLayer as t
JOIN #SearchItem as s
ON t.tags LIKE '% ' + s.Search + ' %'
根据我的测试,这样的JOIN会更快。显然,您不需要像这样手动填充#SearchItem表。
答案 1 :(得分:1)
试试这个:
SELECT * FROM TerrainLayer WHERE tags LIKE '%Ground%Rocks%';