Предложение SQLite WHERE / IN - не работает, когда строка соответствует имени столбца - PullRequest
0 голосов
/ 08 мая 2020

У меня есть запрос:

SELECT mt.* FROM myTable as mt
WHERE mt."colName" IN ("PM")

, и он всегда возвращает нулевые строки. Но если я изменю его так, чтобы строка была заключена в одинарные кавычки:

SELECT mt.* FROM myTable as mt
WHERE mt."colName" IN ('PM')

, тогда он вернет нужные строки.

Подсказка: myTable имеет столбец с именем «PM».

Итак, если я буду искать строки со строкой «AB C» в столбце «colName», он найдет строки. Но если я добавлю столбец с именем «AB C», то этот запрос также не будет выполнен, если я не укажу ('AB C').

Почему?

Любой ответ / решение должны учтите, что список IN будет иметь произвольную длину и будет включать строки со встроенными кавычками (как одинарными, так и двойными).

Кроме того, хотя этот пример предназначен для SQLite, мой запрос также должен работать для Postgres.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020
SELECT mt.* FROM myTable as mt
WHERE PM  IN ('ABC');

Если у вас есть столбец pm, запросите строку, которая имеет строку ABC в имени столбца pm. Для него подходит приведенный выше код

https://www.sqlitetutorial.net/sqlite-select/

0 голосов
/ 08 мая 2020

В SQL строки разделяются одинарными кавычками ( например, 'foo'), тогда как двойные кавычки часто разделяют имена объектов (хотя это зависит от реализации RBDMS). Подробнее здесь { ссылка }

Подробную информацию о SQLite c можно найти в официальной документации :

Если вы хотите использовать ключевое слово в качестве имени, вам нужно его заключить в кавычки. В SQLite есть четыре способа заключения в кавычки ключевых слов:

  • 'keyword' Ключевое слово в одинарных кавычках - это строковый литерал.
  • "keyword" Ключевое слово в двойных кавычках - это идентификатор .
  • [keyword] Ключевое слово, заключенное в квадратные скобки, является идентификатором. > Это не стандартная SQL. Этот механизм цитирования используется MS Access и SQL Server и включен в SQLite для совместимости.
  • `keyword` Ключевое слово, заключенное в серьезные акценты (код ASCII 96), является идентификатором. Это не стандартный SQL. Этот механизм цитирования используется MySQL и включен в SQLite для совместимости.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...