查询本身已经解释说明了我卡住的地方,我无法更改架构,有没有办法使用从if语句获取的表名并继续查询?
SELECT *,IF(user.type = 1,"staff","admin") as "table" FROM user WHERE "table".user_id = user.id
http://sqlfiddle.com/#!9/842be4/1
我尝试设置一个变量,但仍然没有成功。你有什么想法吗? 谢谢。
查询本身已经解释说明了我卡住的地方,我无法更改架构,有没有办法使用从if语句获取的表名并继续查询?
SELECT *,IF(user.type = 1,"staff","admin") as "table" FROM user WHERE "table".user_id = user.id
http://sqlfiddle.com/#!9/842be4/1
我尝试设置一个变量,但仍然没有成功。你有什么想法吗? 谢谢。
SET @table_name = (SELECT IF(user.type = 1,"staff","admin") FROM `user`);
SET @t1 =CONCAT("SELECT * FROM menu LEFT JOIN ", @table_name," ON ", @table_name,".user_id = user.id");
PREPARE stmt FROM @t1;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
JOIN
更改为LEFT JOIN
并查看结果。请参见回答中的编辑查询。 - Rahul我相信这将给你想要的东西。
SELECT * FROM user INNER JOIN staff on user.id = staff.user_id UNION
SELECT * FROM user INNER JOIN admin on user.id = admin.user_id
user.type = 1
,那么table = user
,并且你有user.user_id = user.id
。真的存在两个字段user.user_id
和user.id
吗? - mseifert