Работа с MySQL 8
У меня есть таблица cuenta_contable
(это Self-Referential ) и следующие View
:
CREATE VIEW cuenta_contable_union_view_with_code_32 AS
(
SELECT
cc.code, cc.description
FROM
cuenta_contable cc
WHERE
cc.code = '32'
)
UNION
(
SELECT
cc1.code,
cc1.description
FROM
cuenta_contable cc1
INNER JOIN
cuenta_contable cc2
ON
cc1.parent_cuenta_contable = cc2.id_cuenta_contable
WHERE
cc2.code = '32'
)
ORDER BY
code ASC;
и работает, как ожидается, он возвращает 8 строк.
Обратите внимание, что он использует:
cc.code = '32'
cc2.code = '32'
Подумайте, чтобы этот взгляд был более динамическим Мне нужно заменить эти два 32
на ?
сделать следующее:
SELECT * FROM cuenta_contable_union_view_with_code WHERE cc.code='30' and cc2.code='30'
SELECT * FROM cuenta_contable_union_view_with_code WHERE cc.code='40' and cc2.code='40'
К сожалению,невозможно, если я использую ?
в объявлении представления, тогда происходит:
SQL Error [1064] [42000]: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near '?
Я прочитал другие сообщения, но работаю с Stored Procedures
. В основном о:
В этом случае опция не используется Stored Procedures
, поскольку существуетвозможность или риск в будущем изменить базу данных.
Я пытался использовать (два WHERE
были удалены):
CREATE VIEW cuenta_contable_union_view_with_code AS
(
SELECT
cc.code, cc.description
FROM
cuenta_contable cc
)
UNION
(
SELECT
cc1.code,
cc1.description
FROM
cuenta_contable cc1
INNER JOIN
cuenta_contable cc2
ON
cc1.parent_cuenta_contable = cc2.id_cuenta_contable
)
ORDER BY
code ASC;
Поэтому, используя:
SELECT * FROM cuenta_contable_union_view_with_code;
Работает, но возвращает все - больше из 8
SELECT * FROM cuenta_contable_union_view_with_code WHERE code = '32';
Соблюдайте часть WHERE
. Он возвращает только 1 строку, а не 8 как 'статическую' первую версию.
Следовательно, как решить эту проблему?
Мой худший сценарий - создатьмного «статичных» представлений, но это многословно и не очень практично