繁体   English   中英

sql,联合查询

[英]sql, Union query

请给我5张桌子:

  • 化妆品(idp,产品名称,#idc)
  • domesticproducts(IDDP,描述中,参考,#IDC)
  • 用户(idu,u_name)
  • 命令(IDC,#用户ID,日期)
  • 市场(IDM,#用户ID,市场名称,位置)

我想显示所有记录:

u_name|date      |marketname|location|productname|description|reference
ali   |12-06-2012|Aldi      |DE      |           | TABLE     |65416
sab   |12-06-2013|Aldi      |DE      | makeup    |           | 
sir   |12-06-2010|MG        |FR      |           | chairs    |416

我们可以用工会做到这一点吗? 但是我认为,对于工会,我们应该在具有相同编号的表中具有相同的属性,或者在我的情况下,例如, cosmeticproducts表包含的属性少于domesticproducts

拜托我需要你的帮忙。 我们如何才能做到这一点? 提前致谢 :)

您可以通过在select中使用null来合并具有不同/缺失列的表。

例如:

SELECT a.Column1 AS 'Col1',
       a.Column2 AS 'Col2',
       null AS 'Col3',
       a.Column4 AS 'Col4'
FROM TableA AS a
UNION ALL
SELECT b.Column1 AS 'Col1',
       b.Column2 AS 'Col2',
       b.Column3 AS 'Col3',
       null  AS 'Col4'
FROM TableB AS b

我不知道这是否对您的特定问题有所帮助,但可以帮助您进行工会。

我们可以用工会做到这一点吗? 没有!

超过 UNIONUNION ALL可以实现。 您期望来自不同表的数据对齐为单行。 那不是UNION所做的。

假设我们有以下信息:

users
(idu, u_name)
  1     ali

commands
(idc,#userid,date)
  X      1    12-06-2012

因此,我们创建以下查询:

      select u_name , cast(null as date) dt
      from users
UNION ALL -- union would produce the exact same result
      select null, date
      from commands

结果就是这样:

U_NAME DT
ali    NULL
NULL   12-06-2012

2行!

然而,如果你使用JOINS ,你可能会得到更接近,此查询:

SELECT u_name , c.date
FROM users u
INNER JOIN commands c ON u.idu = c.#userid

会产生以下结果:

U_NAME DATE
ali    12-06-2012

但是 ,对于其余表来说,它要复杂得多,因为尚不清楚在所有情况下如何进行联接,而且还因为某些表可能有多个行用于联接,突然之间,您得到的行比预期的多。

现在,我们也有以下数据:

market
(idm, #userid, marketname, location)
  Y1      1       ALDI         DE
  Y2      1       MG           FR

因此,我们使用联接将其包含在查询中:

SELECT u_name , c.date, m.marketname, m.location
FROM users u
INNER JOIN commands c ON u.idu = c.#userid
INNER JOIN market m ON u.idu = m.#userid

现在我们得到以下结果:

U_NAME DATE        MARKETNAME  LOCATION
ali    12-06-2012  ALDI         DE
ali    12-06-2012  MG           FR

如果不从每个表中提供一些样本数据以及与您提供的数据相关的“预期结果”,就无法完全满足您的要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM