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

时间:2016-06-09 20:02:21

标签: sql sql-server select coldfusion

我的功能在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>

Dealer_Track_Work Table
enter image description here

Dealer_Track_Dealers
enter image description here

我尝试像这样调用两行中的所有列:

<!--- 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>

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

尝试选择idRmks是不明确的,因为两个表都有这样的列。如果您想查询它们,您应该完全符合条件,就像您在where条款中所做的那样:

SELECT dbo.Dealer_Track_Dealers.id, -- Here!
       dealerID,
       Date_Received,
       op_id,
       Date_Due,
       Date_Complete,
       Completed_Late,
       Closed_by,
       dbo.Dealer_Track_Dealers.Rmks, -- And here
       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      

答案 2 :(得分:2)

除了已经说过的所有内容之外,还有一种方法可以让您的页面更快地呈现。我将描述这种方法。你可以尝试一下。

在ColdFusion中,使用<cfsavecontent>将查询结果的显示代码存储到变量中。然后使用toScript()将该CF变量转换为javascript变量。

在HTML中,在页面上放置一个空的<div>容器。最后使用javascript用你创建的javascript变量替换div的内容。