1
SELECT l.name 
FROM locations as l 
WHERE
    l.location_id =',2,32,'

我们从另一个表中得到的“,2,32”值。这个查询给出的结果为零,尽管有 location_id=2 的值和 32。请帮助我如何使用“,2,32”来获得结果?

4

3 回答 3

1

您需要将 where 子句更改为WHERE l.location_id LIKE '%2,32%'.

它允许在位置 ID 中不仅仅是 2 和 32。

另一个建议是每个 location_id 使用一行。这称为规范化,重要的是要了解为什么要使用它。是的,它复制了一些数据,但它会使您的查询更容易。然后你就可以做到了WHERE l.location_id IN (2,32)

编辑:

我刚刚重新阅读了您的问题,看来您的位置表已经标准化。您只想使用我发布的第二个 WHERE 子句。

于 2012-10-09T04:38:31.543 回答
1

假设您要返回 ID 2 和 32 的值,您可以使用以下查询:

SELECT l.name FROM locations AS l WHERE l.location_id IN (2, 32);

IN运算符允许您multiple-valuesWHERE子句中指定

您还可以NOT IN用来消除某些 ID,也可以添加更多 ID,只需用逗号分隔它们即可。

于 2012-10-09T04:39:24.373 回答
0

如果您的 location_id 列是VARCHAR包含逗号分隔值的列,那么您的WHERE子句应该是

WHERE 
    (l.location_id LIKE '2,32%' OR l.location_id LIKE '%,2,32%' OR l.location_id LIKE '%,2,32')

但是,如果您的 location_id 列是一NUMERIC列,那么您想要获取 location_id 为 2 或 32 的行的意图应该由

WHERE location_id IN (2, 32)
于 2012-10-09T04:42:49.553 回答