Mysql SQL从多个表中选择数据

Mysql SQL从多个表中选择数据,mysql,sql,Mysql,Sql,我试图使用mySQL从以下格式的多个表(10+)中进行选择 +----------table(n)-----------+ +-----------------------------+ | url | id | ... | +-----------+-----------+-----+ | url1.com | 12345678 | ... | | url2.com | 45832458 | ... | 我需要做的是从给定URL的每个表中检索id,并在一行中

我试图使用mySQL从以下格式的多个表(10+)中进行选择

+----------table(n)-----------+
+-----------------------------+
| url       | id        | ... |
+-----------+-----------+-----+
| url1.com  | 12345678  | ... |
| url2.com  | 45832458  | ... |
我需要做的是从给定URL的每个表中检索id,并在一行中返回它,如下所示

+--------------table(n)--------------+
+------------------------------------+
| url       | table(n)  | table(n+1) |
+-----------+-----------+------------+
| url1.com  | 12345678  | 8182735    |
但是给定表的URL可能不存在,所以我只需要从找到URL的表中检索所有ID

例如,我有10个表,其中4个表中有一个URL/id。我需要在一行中检索这4个。我曾尝试为列使用别名以及各种连接组合,但都没有效果


任何帮助都将不胜感激。

您可以使用
联合所有人和
分组:

select url,
       max(id1) as id1, max(id2) as id2, . . .
from ((select url, id as id1, NULL as id2, . . .  from table1) union all
      (select url, NULL as id1, id as id2, . . .  from table1) union all
      . . .
     ) t
group by url;

您可以通过
联合所有人
分组方式
来实现这一点:

select url,
       max(id1) as id1, max(id2) as id2, . . .
from ((select url, id as id1, NULL as id2, . . .  from table1) union all
      (select url, NULL as id1, id as id2, . . .  from table1) union all
      . . .
     ) t
group by url;
像这样试试

SELECT tu.URL,COALESCE(table_1.id,0) AS table_1,COALESCE(table_2.id,0) As   
table_2,......,COALESCE(table_n.id,0) AS table_n  FROM Table_URL tu 
LEFT JOIN  table_1 ON tu.URL = table_1.URL
LEFT JOIN  table_2 ON tu.URL = table_2.URL
.
.
LEFT JOIN table_n ON tu.URL = table_n.URL
像这样试试

SELECT tu.URL,COALESCE(table_1.id,0) AS table_1,COALESCE(table_2.id,0) As   
table_2,......,COALESCE(table_n.id,0) AS table_n  FROM Table_URL tu 
LEFT JOIN  table_1 ON tu.URL = table_1.URL
LEFT JOIN  table_2 ON tu.URL = table_2.URL
.
.
LEFT JOIN table_n ON tu.URL = table_n.URL

您希望SQL语句生成的列数可变,而MySQL无法做到这一点

您可以在这里看到一些解决方法:

许多报告工具都可以让你随心所欲地做事情,但使用MySQL的某种预处理语句黑客将是唯一的方法:


您希望SQL语句生成的列数可变,而MySQL无法做到这一点

您可以在这里看到一些解决方法:

许多报告工具都可以让你随心所欲地做事情,但使用MySQL的某种预处理语句黑客将是唯一的方法:


由于输出中的列数可变,您将经历一段艰难的时期。你能这样做吗?这样你就可以提前知道你想要多少列了?表的数量是固定的,结果的数量是不对的,结果中的列的数量是固定的还是不固定的?结果中的列的数量是可变的,这取决于一个url的结果数见我的答案。这比仅仅使用SQL看起来要困难得多。如果输出中的列数可变,您将经历一段艰难的时期。你能这样做吗?这样你就可以提前知道你想要多少列了?表的数量是固定的,结果的数量是不对的,结果中的列的数量是固定的还是不固定的?结果中的列的数量是可变的,这取决于一个url的结果数见我的答案。这比仅仅使用SQL看起来更难。嘿,谢谢你的回答。我需要能够为给定的URL(WHERE URL='somepage.com')指定WHERE子句,我如何才能做到这一点?我需要每张桌子都有WHERE子句吗?嘿,谢谢你的回答。我需要能够为给定的URL(WHERE URL='somepage.com')指定WHERE子句,我如何才能做到这一点?每个表都需要WHERE子句吗?列数可变如何?@mikeb在这种情况下,你在这篇文章中的ans非常有帮助。列数可变如何?@mikeb在这种情况下,你在这篇文章中的ans非常有帮助。