我现在有两个表我需要在SQL中使用select or join command
来使第三个表像下面的图像一样
我的两张桌子是这样的:
我只知道SQL中关于join命令的一些简单的事情,我应该使用join还是别的什么?
我不希望我的数据库中有第三个表,我希望它能在短时间内完成(比如虚拟表)。请帮忙!
答案 0 :(得分:2)
您实际上在寻找UNION
或UNION ALL
。
首先,JOIN
表没有条件(查看JOIN
上的文档),而JOIN
用于检索有关一个逻辑元素的信息,比方说事件在您的情况下,其中包含存储在更多表格中的详细信息。
其次,JOIN
将为您的两个表的所有列创建一个结果集,而实际上您并未尝试获取所有列,而是所有行。
为此,您必须使用UNION
或UNION ALL
,如下所示:
SELECT
EventID,
ID,
EventName,
Date,
Pic,
Privacy
FROM Table1
UNION ALL
SELECT
PLID AS EventID,
ID AS ID,
PlaceName AS EventName,
Date AS Date,
NULL AS Pic,
NULL AS Privacy
FROM Table2
为了对从上面的查询返回的结果集中获得的结果进行排序,您需要将上述SELECT
语句与另一个SELECT
包装在一起,并使用WHERE
子句在那个级别,如下所示:
SELECT *
FROM (SELECT
EventID,
ID,
EventName,
Date,
Pic,
Privacy
FROM Table1
UNION ALL
SELECT
PLID AS EventID,
ID AS ID,
PlaceName AS EventName,
Date AS Date,
NULL AS Pic,
NULL AS Privacy
FROM Table2) AS Result
WHERE Date > '2014-05-26'
答案 1 :(得分:1)
您要做的是UNION或UNION ALL,而不是加入。请参阅:http://www.w3schools.com/sql/sql_union.asp
UNION在不连接其内容的情况下组合了两个表。您的示例显示原始表中未修改的所有4条记录。
JOIN解决方案链接两个表。这很常见,如果您正在构建关系数据库,您可能会使用它,但它不会给您提供示例结果。
由于这两个表没有相同的列数,因此您必须在此处提供帮助:
SELECT EventID, EventName, Date, Pic, privacy FROM [table 1]
UNION ALL
SELECT PLID, PlaceName, Date, null, null FROM [table 2]
答案 2 :(得分:0)
您希望从两个不同的表中获得一个表。因此,您需要通过SELECT语句中的重命名列来统一每个结果集:
SELECT `EventID` AS `ObjectID`, `EventName` AS `ObjectName`, .... FROM table_1 ...
与table_2相似
然后合并到一个结果集:
SELECT `ID` AS `ObjectID`, `EventName` AS `ObjectName`, .... FROM table_1 ...
UNION
SELECT `PlaceID` AS `ObjectID`, `PlaceName` AS `ObjectName`, .... FROM table_2 ...
答案 3 :(得分:-1)
我的错误,我没有花时间完全检查图片。你必须使用Union,因为你想要返回两个表中的内容。