在这种情况下,如何从多个mysql表中选择数据?
好吧,我有一个有点奇怪的场景,我不能改变数据库结构,因为我没有这个权限。对于这个问题,我有三张桌子 表1-在这种情况下,如何从多个mysql表中选择数据?,mysql,Mysql,好吧,我有一个有点奇怪的场景,我不能改变数据库结构,因为我没有这个权限。对于这个问题,我有三张桌子 表1- id(int) | name(varchar) | link_id(int) | link_to(tinyint) .............................................................. 1 | value1 | 1 | 2 2 | value2
id(int) | name(varchar) | link_id(int) | link_to(tinyint)
..............................................................
1 | value1 | 1 | 2
2 | value2 | 3 | 2
3 | value3 | 1 | 3
4 | value4 | 2 | 3
5 | value5 | 3 | 3
id(int) | data(varchar)
............................
1 | some1
2 | some2
3 | some3
id(int) | data(varchar)
............................
1 | another1
2 | another2
3 | another3
表2-
id(int) | name(varchar) | link_id(int) | link_to(tinyint)
..............................................................
1 | value1 | 1 | 2
2 | value2 | 3 | 2
3 | value3 | 1 | 3
4 | value4 | 2 | 3
5 | value5 | 3 | 3
id(int) | data(varchar)
............................
1 | some1
2 | some2
3 | some3
id(int) | data(varchar)
............................
1 | another1
2 | another2
3 | another3
表3-
id(int) | name(varchar) | link_id(int) | link_to(tinyint)
..............................................................
1 | value1 | 1 | 2
2 | value2 | 3 | 2
3 | value3 | 1 | 3
4 | value4 | 2 | 3
5 | value5 | 3 | 3
id(int) | data(varchar)
............................
1 | some1
2 | some2
3 | some3
id(int) | data(varchar)
............................
1 | another1
2 | another2
3 | another3
现在让我解释一下:在表1
中,link\u id
是表2
或表3
的id
字段,并且link\u to
说明它是链接到表2还是表3
现在,我需要从所有3个表中获取组合数据,以便针对表1
中的每个名称
字段,从正确的表中获取数据
字段,该表由该行中的link\u id和link\u to字段定义
有任何mysql查询可以实现这一点吗?您可以尝试使用UNION
(
SELECT t1.id,t2.data
FROM table1 t1
INNER JOIN table2 t2 ON t1.link_id=t2.id AND t1.link_to=2
) UNION (
SELECT t1.id,t3.data
FROM table1 t1
INNER JOIN table3 t3 ON t1.link_id=t3.id AND t1.link_to=3
)
你可以试着和工会合作
(
SELECT t1.id,t2.data
FROM table1 t1
INNER JOIN table2 t2 ON t1.link_id=t2.id AND t1.link_to=2
) UNION (
SELECT t1.id,t3.data
FROM table1 t1
INNER JOIN table3 t3 ON t1.link_id=t3.id AND t1.link_to=3
)
我同意公认的答案。 还可以创建存储过程并允许搜索
# stored procedure
DELIMITER $$;CREATE PROCEDURE `search_by_value`(
in_searchValue VARCHAR(255)
)
BEGIN
DECLARE jointable INTEGER;
SELECT link_to INTO jointable FROM table1 WHERE name = in_searchValue;
IF (jointable = 2) THEN
SELECT * FROM table1 t1 left join table2 t2 on t1.link_id = t2.id WHERE t1.name = in_searchValue;
ELSEIF (jointable = 3) THEN
SELECT * FROM table1 t1 left join table3 t3 on t1.link_id = t3.id WHERE t1.name = in_searchValue;
END IF;
END $$
DELIMITER;
# call the sp
call search_by_value('value1');
我同意公认的答案。 还可以创建存储过程并允许搜索
# stored procedure
DELIMITER $$;CREATE PROCEDURE `search_by_value`(
in_searchValue VARCHAR(255)
)
BEGIN
DECLARE jointable INTEGER;
SELECT link_to INTO jointable FROM table1 WHERE name = in_searchValue;
IF (jointable = 2) THEN
SELECT * FROM table1 t1 left join table2 t2 on t1.link_id = t2.id WHERE t1.name = in_searchValue;
ELSEIF (jointable = 3) THEN
SELECT * FROM table1 t1 left join table3 t3 on t1.link_id = t3.id WHERE t1.name = in_searchValue;
END IF;
END $$
DELIMITER;
# call the sp
call search_by_value('value1');