У меня есть SQL-запрос, в котором я хочу, чтобы только некоторые условия проверялись, если выполняется внешнее условие, т. Е. Если переменная соответствует определенному значению, которое устанавливается вне запроса (часть программы Ruby).
Например, в базе данных информации о книге у меня есть переменная «author», которая заполнена именем человека или «None».Я сравниваю значения этой книги с другими книгами и хотел бы, чтобы эта переменная направлялась в SQL-запрос, чтобы, если author = 'None'
, было указано указанное условие.Если это что-то отличное от None, условие можно игнорировать.Что-то, что теоретически будет работать так:
SELECT *
FROM db AS data
WHERE 1=1
AND data.random_field <> '123' if #{author} <> 'None'
Я пробовал это:
AND NOT (#{author} = 'None' AND data.random_field <> '123')
, что, очевидно, не работает, потому что значение переменной author
интерпретируется какимя поля, а не просто переменная.
Моя другая мысль заключалась в том, чтобы вместо этого получить исходное значение author
из подзапроса, а не как внешнюю переменную (поскольку данные происходят из той же базы данных).Что-то вроде:
SELECT DISTINCT author
FROM db AS data
WHERE 1=1
AND data.id = '[original_book_id]'
и сохранение его в самом запросе как переменная author
.Я не уверен, какой из двух вариантов выполним, или лучше: вставьте внешнюю переменную в запрос SQL или задайте переменную в запросе, а затем каким-либо образом создайте условие на основе этого значения?