在调用两个表时删除查询中的*

Dav*_*ton 0 sql sql-server coldfusion select

我有一个比Internet Explorer中的污垢慢但在Firefox中速度快的功能.我正在使用select*因为它正在使用表中的所有内容.我尝试将*输出并列出所有列,但随后它因为我使用两个表而中断,我很好奇是否有人可以帮我解决这个问题.(我正在使用MSSQL 2012)

<!--- Display Table for DataTables --->
<cffunction name="displayTable" access="public" returntype="query">
    <cfset var processTable = ''>
    <cfquery name="processTable">
        SELECT *
        FROM dbo.Dealer_Track_Work, dbo.Dealer_Track_Dealers
        WHERE dbo.Dealer_Track_Work.dealerID = dbo.Dealer_Track_Dealers.id      
    </cfquery>
    <cfreturn processTable>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

Dealer_Track_Work表
在此输入图像描述

Dealer_Track_Dealers
在此输入图像描述

我尝试调用两行中的所有列,如下所示:

<!--- Display Table for DataTables --->
<cffunction name="displayTable" access="public" returntype="query">
    <cfset var processTable = ''>
    <cfquery name="processTable">
        SELECT id, dealerID, Date_Received, op_id, Date_Due, Date_Complete, Completed_Late, Closed_by, Rmks, Processing_Location, Item_Count, Name
        FROM dbo.Dealer_Track_Work, dbo.Dealer_Track_Dealers
        WHERE dbo.Dealer_Track_Work.dealerID = dbo.Dealer_Track_Dealers.id      
    </cfquery>
    <cfreturn processTable>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

DVK*_*DVK 5

您确定SQL查询是问题吗?听起来,浏览器呈现结果的速度差异更可能是您的问题.使用SQL事件探查器或SSMS直接对数据库执行查询并查看统计信息.如果查询快速运行,您需要将优化工作集中在其他位置.

关于SQL,为了在执行连接时指定列名,您需要完全限定列名或别名表.此外,由于更复杂的查询中的可读性,我建议不要使用隐式连接.

 SELECT dtw.id, 
    dtw.dealerID, 
    dtw.Date_Received, 
    dtw.op_id, 
    dtw.Date_Due, 
    dtw.Date_Complete, 
    dtw.Completed_Late, 
    dtw.Closed_by, 
    dtw.Rmks, 
    dtw.Processing_Location, 
    dtw.Item_Count, 
    dtd.Name
FROM dbo.Dealer_Track_Work dtw
JOIN dbo.Dealer_Track_Dealers dtd ON dtw.dealerID = dtd.dealerID
Run Code Online (Sandbox Code Playgroud)

  • ..具体而言,就cfquery而言,SELECT通常不需要多次返回相同的列名.如果由于某种原因你确实需要两者,你必须有一个*column*别名,这样两列的名称就不同了.否则,CF将仅返回其中一列的值. (2认同)