sql,联合查询

时间:2014-09-19 09:30:00

标签: mysql sql

我有5张桌子:

  • cosmeticproducts(idp,productname,#idc)
  • domesticproducts(IDDP,描述中,参考,#IDC)
  • 用户(idu,u_name)
  • 命令(idc,#userid,date)
  • 市场(idm,#userid,marketname,location)

我想要显示所有记录:

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

我需要你的帮助。我们怎么能做到这一点? 在此先感谢:)

2 个答案:

答案 0 :(得分:1)

您可以通过在select中使用空值来联合具有不同/缺少列的表。

例如:

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

我不知道这是否有助于解决您的具体问题,但应该帮助您加入工会。

答案 1 :(得分:1)

我们可以用联盟吗?不!

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

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