mysql - MySQL 变量数据库名称语法错误
问题描述
我正在尝试为 MySQL 查询设置数据库名称。我已经能够让我的第一个查询工作,但第二个我正在努力找出我的语法错误在哪里。我猜它与变量有关,但我被卡住了。
SET @db = CONCAT('SELECT client_databases.database_name
FROM client_databases
JOIN jobs ON jobs.organisation_id = client_databases.organisation_id
WHERE jobs.transaction_reference="K01-REC0000001"');
SET @q = CONCAT('SELECT receipts_lines.id, product_code, product_name, receipts_lines.is_putaway
FROM ', @db ,'.receipts
JOIN ', @db ,'.receipts_lines ON receipts_lines.receipt_id = receipts.id
WHERE reference_number="K01-REC0000001"');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
解决方案
你应该做这样的事情。您在@db 中选择数据库名称并使用它来构建您的 stmt
SELECT client_databases.database_name INTO @db
FROM client_databases
JOIN jobs ON jobs.organisation_id = client_databases.organisation_id
WHERE jobs.transaction_reference="K01-REC0000001";
SET @q = CONCAT('SELECT receipts_lines.id, product_code, product_name, receipts_lines.is_putaway
FROM ', @db ,'.receipts
JOIN ', @db ,'.receipts_lines ON receipts_lines.receipt_id = receipts.id
WHERE reference_number="K01-REC0000001"');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
推荐阅读
- python - 即使使用线程,kivymd MDProgressBar UI 也不会更新
- flutter - 带有地图和信息面板的应用程序屏幕应在按钮单击或向下滑动时隐藏和显示面板
- python - BS4:在 Python 中遍历页面返回相同的结果
- go - Go + yaml.Unmarshal + maps - 如何覆盖
- ms-access - MS ACCESS 中基于 Fifo 的销售
- ios - iOS UICollectionView ConsoleLog 当Item Width大于CollectionView宽度时的注意事项
- vba - 将格式化的 Excel 数据透视表插入 Word
- node.js - 如何将变量发送到中间件
- python - 在while循环的if语句中使用嵌套的try / except
- node.js - 如何为 npm 模块 client-oauth2 包含代理配置