【问题标题】:duplicate columns when using join [duplicate]使用连接时重复列[重复]
【发布时间】:2023-03-06 11:07:01
【问题描述】:

我正在尝试加入两个表:trainSearchStreamSearchInfo,基于一个公共列:SearchID

SELECT *
FROM   trainSearchStream
       INNER JOIN SearchInfo
               ON trainSearchStream.SearchID = SearchInfo.SearchID
LIMIT  3; 

问题是结果有两列SearchIDSearchID如何只显示一列?

这些是trainSearchStream的列:

SearchID,AdID,Position,ObjectType,HistCTR,IsClick

这些是SearchInfo 的列:

 SearchDate,IPID,UserID,IsUserLoggedOn,SearchQuery,LocationID,CategoryID,SearchParams

我的另一个问题是如何将我的 select 语句的结果保存在新表中?

【问题讨论】:

  • 你能发布一个示例输出吗?
  • 您使用的是哪个数据库? MySQL 还是 SQLite?
  • Sqlite3 @ColonelThirtyTwo
  • @MAS 以后请只标记您正在使用的数据库软件。

标签: sql sqlite


【解决方案1】:

SELECT 列表中删除 *,并给出要返回的特定列列表。

  SELECT t.SearchID
       , t.AdID
       , t.Position
       , t.ObjectType
       , t.HistCTR
       , t.IsClick
       , i.SearchDate
       , i.IPID
       , i.UserID
       , i.IsUserLoggedOn
       , i.SearchQuery
       , i.LocationID
       , i.CategoryID
       , i.SearchParams
    FROM trainSearchStream t
    JOIN SearchInfo i 
      ON t.SearchID = i..SearchID
   LIMIT 3;

要将结果“保存”到另一个表中,您可以使用INSERT ... SELECT 声明。如果要创建新表,可以使用CREATE TABLE ... SELECT 语句。

参考文献:

INSERT ... SELECT https://dev.mysql.com/doc/refman/5.5/en/insert-select.html

CREATE TABLE ... SELECT https://dev.mysql.com/doc/refman/5.5/en/create-table-select.html

【讨论】:

  • 另请注意:最佳实践是使用表名(或表别名)限定 all 列引用,如示例查询中所示。这可以避免您的语句在将来引发“不明确的列引用”错误,如果有人要向表中添加列,例如将UserID 列添加到trainSearchStream 表中。列引用限定后,该语句将继续工作。如果对 UserID 的引用不合格,则正在运行的语句将开始引发错误。
【解决方案2】:

准确指定您想要查看的列。这始终是首选方式

SELECT 
t.SearchID,AdID,Position,ObjectType,HistCTR,IsClick,
SearchDate, IPID,UserID,IsUserLoggedOn,SearchQuery,LocationID,CategoryID,SearchParams
FROM trainSearchStream  t
INNER JOIN SearchInfo ON trainSearchStream.SearchID = SearchInfo.SearchID LIMIT 3;

编辑

我忘记包含别名并将其应用于列SearchId

【讨论】:

  • 我得到错误:不明确的列名:SearchID
猜你喜欢
  • 2015-04-29
  • 2017-08-02
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2016-10-01
  • 2012-10-19
  • 2013-01-12
  • 2016-01-03
相关资源
最近更新 更多