Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-创建连接在一起的多个表的视图_Mysql_Sql - Fatal编程技术网

Mysql SQL-创建连接在一起的多个表的视图

Mysql SQL-创建连接在一起的多个表的视图,mysql,sql,Mysql,Sql,我需要创建一个多个表的视图,这些表连接到一个名为artists的表,以便可以轻松地引用它 视图中数据的排列是我正在努力解决的问题。我需要连接彼此独立,这样就不会复制数据。我将给出到目前为止的查询,然后给出一些示例 CREATE VIEW stream_view AS SELECT A.ID, T.T_ID, T.name AS name, T.pic AS T_pic, T.timestamp AS T_ts, (SELECT COUNT(*) FROM track_plays WHERE T_

我需要创建一个多个表的视图,这些表连接到一个名为
artists
的表,以便可以轻松地引用它

视图中数据的排列是我正在努力解决的问题。我需要连接彼此独立,这样就不会复制数据。我将给出到目前为止的查询,然后给出一些示例

CREATE VIEW stream_view AS
SELECT
A.ID,
T.T_ID,
T.name AS name,
T.pic AS T_pic,
T.timestamp AS T_ts,
(SELECT COUNT(*) FROM track_plays WHERE T_ID = T.T_ID) AS plays,
(SELECT COUNT(*) FROM track_downloads WHERE T.T_ID) AS downloads,
(SELECT COUNT(*) FROM likes WHERE E_ID = T.ID AND event = 'T') AS T_likes,
S.S_ID,
S.status,
S.timestamp AS S_ts,
(SELECT COUNT(*) FROM likes WHERE E_ID = S.ID AND event = 'S') AS S_likes,
G.G_ID,                                                
G.gig_name,
G.date_time,
G.lineup,
G.price, 
G.currency,
G.pic AS G_pic,
G.ticket,
G.venue,
G.timestamp AS G_ts,
(SELECT COUNT(*) FROM likes WHERE E_ID = G.ID AND event = 'G') AS G_likes

FROM artists A
LEFT JOIN status S 
ON S.ID = A.ID
LEFT JOIN gigs G ON G.ID = A.ID
LEFT JOIN tracks T ON T.ID = A.ID
为了简单起见,我将举一些例子,但只包括所有内容的ID

应该发生什么的示例

假设我有两个3
A.ID
,分别为1、2和3。每个ID都有一些属于它们的
G\u ID
T\u ID
、和
s\u ID
。视图应该显示出来,这样就不会有重复项,并且每个
G_ID
T_ID
S_ID
都位于不同的行上,并分配给它们的
a_ID
。像这样的东西

 A_ID    G_ID    T_ID    S_ID

 1       1       NULL    NULL
 1       NULL    4       NULL
 2       NULL    NULL    5
 3       2       NULL    NULL
 3       NULL    8       NULL
 3       NULL    NULL    8
当前发生情况的示例

 A_ID    G_ID    T_ID    S_ID

 1       1       NULL    NULL
 1       1       4       NULL
 2       NULL    NULL    5
 3       2       NULL    NULL
 3       2       8       NULL
 3       2       8       8

如您所见,数据是重复的,因此表中包含多个相同的
G\u ID
T\u ID
S\u ID
。这些ID在它们自己的列中是唯一的,因此它们不能是
G_ID
的副本,但是
G_ID
t_ID
可以具有相同的值。

现在,您正在将行连接在一起。似乎您需要一个
联合所有
查询

这是基于您提供的示例数据的结构:

select a.*, t.*
from ((select a_id, g_id, null as t_id, null as s_id
       from gigs g
      ) union all
      (select a_id, null as g_id, t_id, null as s_id
       from tracks t
      ) union all
      (select a_id, null as g_id, null as t_id, s_id
       from status s
      )
     ) t join
     artists a
     on t.a_id = a.a_id

@marc_很抱歉,忘记添加了。JFYI:您的数据库名为mysql,而不是MySQlitis。它似乎是的副本-提供的答案中至少有一个应该返回所请求的输出。如果每个表中的列数相同,但您可以从我的查询中看到它们不相同,则联合就可以工作。