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;

关于MySQL 变量数据库名称语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59705061/

相关文章:

MySQL 检查两列的值但具有首选列结果

PHP/MySQL/jQuery/AJAX 类似 Twitter 的新闻提要更新

mysql - 每组选择四个项目?

php - 从客户表中选择最新记录

android - 在单个数据库字段中存储逐行数据

php - 尝试按 ASC 顺序获取结果但收到错误

mysql - 如果只有一个匹配,则返回连接表中的所有相关行

mysql - sql查询中where子句中n的用途是什么

mysql - 如何将 IF ELSE 写入此查询以使其工作?

php - 获取 GROUP_CONCAT 的某个元素的 ID?