标签: inner-join

INNER JOIN条件中的'OR'是个坏主意吗?

在尝试提高极慢查询的速度时(在两个表上只有几万分钟,在SQL Server 2008上只有几万行,如果重要的话),我将问题缩小到OR我的内连接中,如:

SELECT mt.ID, mt.ParentID, ot.MasterID
  FROM dbo.MainTable AS mt
  INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID
                                  OR ot.ID = mt.ParentID
Run Code Online (Sandbox Code Playgroud)

我把它更改为(我希望是)一对等效的左连接,如下所示:

SELECT mt.ID, mt.ParentID,
   CASE WHEN ot1.MasterID IS NOT NULL THEN
      ot1.MasterID ELSE
      ot2.MasterID END AS MasterID
  FROM dbo.MainTable AS mt
  LEFT JOIN dbo.OtherTable AS ot1 ON ot1.ParentID = mt.ID
  LEFT JOIN dbo.OtherTable AS ot2 ON ot2.ID = mt.ParentID
  WHERE ot1.MasterID IS NOT NULL OR ot2.MasterID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

..现在查询运行大约一秒钟!

OR加入条件通常是个坏主意吗?或者我在桌子的布局中不知何故不幸?

sql t-sql sql-server inner-join sql-server-2008

89
推荐指数
2
解决办法
10万
查看次数

MySQL INNER JOIN只从第二个表中选择一行

我有一个users表和一个payments表,对于每个用户,其中有付款,可能在payments表中有多个相关的付款.我想选择所有付款用户,但只选择最新付款.我正在尝试这个SQL,但我从来没有尝试过嵌套的SQL语句,所以我想知道我做错了什么.感谢帮助

SELECT u.* 
FROM users AS u
    INNER JOIN (
        SELECT p.*
        FROM payments AS p
        ORDER BY date DESC
        LIMIT 1
    )
    ON p.user_id = u.id
WHERE u.package = 1
Run Code Online (Sandbox Code Playgroud)

mysql sql select inner-join

83
推荐指数
3
解决办法
17万
查看次数

Rails ActiveRecord:与LEFT JOIN而不是INNER JOIN连接

我有这个代码

User.find(:all, :limit => 10, :joins => :user_points,
                :select => "users.*, count(user_points.id)", :group =>
                "user_points.user_id")
Run Code Online (Sandbox Code Playgroud)

它生成以下sql

SELECT users.*, count(user_points.id) 
FROM `users` 
INNER JOIN `user_points` 
ON user_points.user_id = users.id 
GROUP BY user_points.user_id 
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

是否可以以其他方式进行LEFT JOIN而不是INNER JOIN,User.find_by_sql并且可以手动输入查询?

activerecord join ruby-on-rails inner-join left-join

71
推荐指数
3
解决办法
7万
查看次数

MySQL JOIN与LEFT JOIN的区别

我有这个跨数据库查询...

SELECT
            `DM_Server`.`Jobs`.*,
            `DM_Server`.servers.Description AS server,
            digital_inventory.params,
            products.products_id,
            products.products_pdfupload,
            customers.customers_firstname,
            customers.customers_lastname
        FROM `DM_Server`.`Jobs`
        INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID
        JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name
        JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf")
        JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID
        ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50
Run Code Online (Sandbox Code Playgroud)

它运行良好,直到我做它们LEFT JOIN.我认为通过不指定一种类型的连接,它被认为是一种LEFT JOIN.这不是这种情况吗?

mysql inner-join query-optimization left-join

65
推荐指数
4
解决办法
8万
查看次数

如何将SQL中的多个内部联接转换为LINQ?

我已经掌握了LINQ-to-SQL的基础知识,但我一直在努力让JOIN正常工作.我想知道如何将以下内容转换为LINQ-to-SQL(理想情况下使用方法链接,因为这是我的首选格式).

SELECT      c.CompanyId, c.CompanyName,
            p.FirstName + ' ' + p.LastName as AccountCoordinator,
            p2.FirstName + ' ' + p2.LastName as AccountManager
FROM        dbo.Companies c
INNER JOIN  dbo.Persons p
ON          c.AccountCoordinatorPersonId = p.PersonId
INNER JOIN  dbo.Persons p2
ON          c.AccountManagerPersonId = p2.PersonId
Run Code Online (Sandbox Code Playgroud)

c# linq inner-join linq-to-sql

59
推荐指数
1
解决办法
6万
查看次数

SQL Inner连接两个以上的表

我目前可以通过以下方式查询外键/主键相等的两个表的连接.

 $result = mysql_query("SELECT * FROM `table1` 
                         INNER JOIN 
                       `table2` ON table1.primaryKey=table2.table1Id");
Run Code Online (Sandbox Code Playgroud)

我想将它扩展到多个表(都使用相同的外键).我正在尝试以下代码,它没有返回任何内容.谁能指出我做错了什么?

 $result = mysql_query("SELECT * FROM `table1` 
                        INNER JOIN `table2` 
                        INNER JOIN table3 
                        ON table1.primaryKey=table2.table1Id=table3.table1Id");
Run Code Online (Sandbox Code Playgroud)

sql inner-join

56
推荐指数
2
解决办法
30万
查看次数

INNER JOIN vs INNER JOIN(SELECT.FROM)

同一查询的这两个版本在性能方面有什么不同吗?

--Version 1
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN SalesOrderDetail s on p.ProductID = s.ProductID

--Version 2
SELECT p.Name, s.OrderQty
FROM Product p
INNER JOIN (SELECT ProductID, OrderQty FROM SalesOrderDetail) s on p.ProductID = s.ProductID
Run Code Online (Sandbox Code Playgroud)

我听说(由DBA)说版本2更快,因为它在内部SELECT语句中仅获取查询所需的列.但这似乎没有意义,因为查询性能(据我所知)是基于受影响的行数和返回的最终列列表.

两者的查询计划是相同的,所以我猜这两者之间没有任何区别.

我对么?

sql sql-server join inner-join

52
推荐指数
2
解决办法
20万
查看次数

为什么Pandas内连接会产生ValueError:len(left_on)必须等于"right"索引中的级别数?

我正在尝试将DataFrame A内部连接到DataFrame B并遇到错误.

这是我的连接声明:

merged = DataFrameA.join(DataFrameB, on=['Code','Date'])
Run Code Online (Sandbox Code Playgroud)

这是错误:

ValueError: len(left_on) must equal the number of levels in the index of "right"
Run Code Online (Sandbox Code Playgroud)

我不确定列顺序是否重要(它们不是真正"有序"的吗?),但为了以防万一,DataFrames组织如下:

DataFrameA:  Code, Date, ColA, ColB, ColC, ..., ColG, ColH (shape: 80514, 8 - no index)
DataFrameB:  Date, Code, Col1, Col2, Col3, ..., Col15, Col16 (shape: 859, 16 - no index)
Run Code Online (Sandbox Code Playgroud)

我需要更正我的加入声明吗?或者是否有另一种更好的方法来获得这两个DataFrame的交集(或内连接)?

python merge join inner-join pandas

52
推荐指数
2
解决办法
5万
查看次数

在1台服务器上的2个不同数据库中的表之间使用INNER JOIN更新查询

需要一些SQL语法帮助:-)

两个数据库都在同一台服务器上

db1 = DHE
db2 = DHE_Import

UPDATE DHE.dbo.tblAccounts 
INNER JOIN DHE_Import.dbo.tblSalesRepsAccountsLink 
    ON DHE.dbo.tblAccounts.AccountCode = DHE_Import.tblSalesRepsAccountsLink.AccountCode 
SET DHE.dbo.tblAccounts.ControllingSalesRep = DHE_Import.dbo.tblSalesRepsAccountsLink.SalesRepCode
Run Code Online (Sandbox Code Playgroud)

我可以在Access中使用具有类似语法的链接表进行查询 - 但是SQL不喜欢它.

我确定这是一个简单的问题:-D

谢谢!

database sql-server syntax inner-join

51
推荐指数
4
解决办法
35万
查看次数

MySQL查询以获得具有限制的众多查询的"交集"

假设我有一个mySQL表(用户),其中包含以下字段:

userid  
gender  
region  
age  
ethnicity  
income
Run Code Online (Sandbox Code Playgroud)

我希望能够根据用户输入的数量返回总记录数.此外,他们还将提供额外的标准.

在最简单的例子中,他们可能会要求1000条记录,其中600条记录应该是性别="男性",400条记录中性别="女性".这很简单.

现在,再往前走一步.假设他们现在想要指定Region:

GENDER  
    Male:   600 records  
    Female: 400 records  

REGION  
    North:  100 records  
    South:  200 records  
    East:   300 records  
    West:   400 records
Run Code Online (Sandbox Code Playgroud)

同样,只应返回1000条记录,但最终必须有600名男性,400名女性,100名北方人,200名南方人,300名东方人和400名西方人.

我知道这不是有效的语法,但使用伪mySQL代码,它有希望说明我正在尝试做什么:

(SELECT * FROM users WHERE gender = 'Male' LIMIT 600  
UNION  
SELECT * FROM users WHERE gender = 'Female' LIMIT 400)

INTERSECT

(SELECT * FROM users WHERE region = 'North' LIMIT 100  
UNION  
SELECT * FROM users WHERE region = 'South' LIMIT 200  
UNION  
SELECT * FROM users …
Run Code Online (Sandbox Code Playgroud)

mysql sql database select inner-join

43
推荐指数
2
解决办法
1616
查看次数