标签: inner-join

在mysql中使用where和inner join

我有三张桌子.

地点

ID   | NAME | TYPE |
1    | add1 | stat |
2    | add2 | coun | 
3    | add3 | coun |
4    | add4 | coun | 
5    | add5 | stat | 
Run Code Online (Sandbox Code Playgroud)

学校

 ID | NAME  
 1  | sch1     
 2  | sch2
 3  |sch3 
Run Code Online (Sandbox Code Playgroud)

school_locations

 ID |LOCATIONS_ID |SCHOOL_ID
 1  | 1           |1
 2  | 2           |2
 3  | 3           |3
Run Code Online (Sandbox Code Playgroud)

这里的表位置包含应用程序的所有位置.学校的位置由ID调用.

当我使用查询

select locations.name from locations where type="coun";
Run Code Online (Sandbox Code Playgroud)

它显示类型为"coun"的名称

但是我想显示locations.name,其中只有school_locations有type ="coun"

我尝试了以下查询,但似乎都没有工作

select locations.name …
Run Code Online (Sandbox Code Playgroud)

mysql inner-join

28
推荐指数
1
解决办法
14万
查看次数

CROSS JOIN是没有ON子句的INNER JOIN的同义词吗?

我想知道是否CROSS JOIN可以INNER JOIN在找到任何查询时安全地替换它.

INNER JOIN没有ONUSING完全一样的CROSS JOIN?如果是,那么CROSS JOIN发明的类型只是为了在查询中更好地表达意图吗?

这个问题的附录是:

哪有用在使用现代化的和广泛使用的DBMS的不同CROSS JOIN ... WHERE x, INNER JOIN ... ON ( x )INNER JOIN ... WHERE ( x )

谢谢.

sql inner-join cross-join

27
推荐指数
1
解决办法
3万
查看次数

在mysql中使用3个表进行内连接

我想从内部联接的更多表中选择数据.

这些是我的表.

Student (studentId, firstName, lastname)
Exam (examId, name, date)
Grade (gradeId, fk_studentId, fk_examId, grade)
Run Code Online (Sandbox Code Playgroud)

我想写一份声明,说明学生去过的考试,成绩和日期.按日期排序.

这是我的发言.它运行,但我想确保我正确地做到了.

SELECT
  student.firstname,
  student.lastname,
  exam.name,
  exam.date,
  grade.grade
FROM grade
  INNER JOIN student
    ON student.studentId = grade.gradeId
  INNER JOIN exam
    ON exam.examId = grade.gradeId
ORDER BY exam.date
Run Code Online (Sandbox Code Playgroud)

mysql database inner-join

27
推荐指数
2
解决办法
13万
查看次数

仅基于表的一列消除重复值

我的查询:

SELECT sites.siteName, sites.siteIP, history.date
FROM sites INNER JOIN
     history ON sites.siteName = history.siteName
ORDER BY siteName,date
Run Code Online (Sandbox Code Playgroud)

输出的第一部分:

在此输入图像描述

如何删除siteName列中的重复项?我想只留下基于date列的更新版本.

在上面的示例输出中,我需要行1,3,6,10

sql sql-server inner-join distinct duplicate-removal

27
推荐指数
2
解决办法
8万
查看次数

SQL:内部连接两个大型表

我有两个大表,每个表有大约1亿条记录,我担心我需要在两者之间进行内部连接.现在,两张桌子都非常简单; 这是描述:

BioEntity表:

  • BioEntityId(int)
  • 名称(nvarchar 4000,虽然这是一个过度杀手)
  • TypeId(int)

EGM表(一个辅助表,实际上是批量导入操作的结果):

  • EMGId(int)
  • PId(int)
  • 名称(nvarchar 4000,虽然这是一个过度杀手)
  • TypeId(int)
  • LastModified(日期)

我需要获得匹配的名称,以便将BioEntityId与驻留在EGM表中的PId相关联.最初,我尝试使用单个内连接执行所有操作,但查询似乎占用时间太长,数据库的日志文件(在简单恢复模式下)设法咀嚼所有可用磁盘空间(刚刚超过200 GB,当数据库占用18GB)并且等待两天后查询将失败,如果我没有弄错的话.我设法保持日志不会增长(现在只有33 MB),但查询已经连续运行了6天,并且它看起来不会很快就会停止.

我在相当不错的计算机上运行它(4GB RAM,Core 2 Duo(E8400)3GHz,Windows Server 2008,SQL Server 2008)并且我注意到计算机偶尔会每30秒(给予或接受)一次几秒钟.这使得它很难用于其他任何事情,这真的让我感到紧张.

现在,这是查询:

 SELECT EGM.Name, BioEntity.BioEntityId INTO AUX
 FROM EGM INNER JOIN BioEntity 
 ON EGM.name LIKE BioEntity.Name AND EGM.TypeId = BioEntity.TypeId
Run Code Online (Sandbox Code Playgroud)

我手动设置了一些索引; EGM和BioEntity都有一个包含TypeId和Name的非聚集覆盖索引.但是,查询运行了五天,它也没有结束,所以我尝试运行Database Tuning Advisor来使事情发挥作用.它建议删除我的旧索引并创建统计信息和两个聚簇索引(每个表上一个,只包含我发现相当奇怪的TypeId - 或者只是简单的愚蠢 - 但我还是试了一下).

它现在已经运行了6天,我仍然不确定该怎么做......任何想法的人?我怎样才能更快(或者至少有限)?

更新: - 好的,我已取消查询并重新启动服务器以使操作系统重新启动并运行 - 我正在使用您提议的更改重新运行工作流程,特别是将nvarchar字段裁剪为更小的尺寸并交换"like"为"=".这将需要至少两个小时,所以我稍后会发布进一步的更新

更新2(格林尼治标准时间下午1点,2009年11月18日): - 估计的执行计划显示有关表扫描的成本为67%,然后是33%的哈希匹配.接下来是0%的并行性(这不是很奇怪吗?这是我第一次使用估计的执行计划,但这个特殊的事实只是抬起了我的眉毛),0%哈希匹配,0%并行度,0%顶部,0 %table insert和最后另一个0%select into.似乎索引是垃圾,正如预期的那样,所以我将制作手动索引并丢弃糟糕的建议.

sql sql-server inner-join query-optimization sql-server-2008

24
推荐指数
4
解决办法
3万
查看次数

如何加入两个表mysql?

我有两张桌子:

服务

  • ID
  • 客户
  • 服务

客户

  • ID
  • 名称
  • 电子邮件

如何列出表服务并汇集客户表的客户名称?表中的现场客户服务具有客户表中客户的ID,

我很感谢你的帮助

mysql sql inner-join

24
推荐指数
2
解决办法
8万
查看次数

如何选择某些列中具有相同值的所有行

我是sql的新手,所以请善待.

假设我必须显示所有具有相同电话号码的employee_ids(两列都在同一个表中)

我如何继续这个问题内部联接或什么.

sql sql-server inner-join

24
推荐指数
2
解决办法
13万
查看次数

有条件的内部加入

我希望能够根据表达式的结果内部连接两个表.

到目前为止我一直在努力:

INNER JOIN CASE WHEN RegT.Type = 1 THEN TimeRegistration ELSE DrivingRegistration AS RReg
ON
RReg.RegistreringsId = R.Id
Run Code Online (Sandbox Code Playgroud)

RegT是我在此加入之前创建的联接:

INNER JOIN RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
Run Code Online (Sandbox Code Playgroud)

此SQL脚本不起作用.

总而言之,如果Type是1,那么它应该加入表中,TimeRegistration否则它应该加入DrivingRegistration.

解:

在我的select语句中,我执行了以下连接:

INNER JOIN  RegistrationTypes AS RegT ON R.RegistrationTypeId = RegT.Id
LEFT OUTER JOIN TimeRegistration AS TReg ON TReg.RegistreringsId = R.Id AND RegT.Type = 1
LEFT OUTER JOIN DrivingRegistration AS DReg ON DReg.RegistreringsId = R.Id AND RegT.Type <>1
Run Code Online (Sandbox Code Playgroud)

然后我编辑我where-clause的输出正确,取决于RegType,像这样: …

sql t-sql sql-server join inner-join

23
推荐指数
2
解决办法
4万
查看次数

SQL内部连接具有多个列条件和更新的2个表

我正在使用此脚本,尝试连接2个表,其中包含3个条件并更新T1:

Update T1 set T1.Inci = T2.Inci 
ON T1.Brands = T2.Brands 
AND T1.Category= T2.Category
AND T1.Date = T2.Date
Run Code Online (Sandbox Code Playgroud)

但我遇到了:

Incorrect syntax near the keyword 'ON'.

无法弄明白为什么.

sql inner-join sql-update

21
推荐指数
2
解决办法
9万
查看次数

mysql:为什么左连接不使用索引?

我遇到了一个mysql查询的奇怪性能问题.

SELECT
`pricemaster_products`.*,
`products`.*
FROM `pricemaster_products`
LEFT JOIN `products`
ON `pricemaster_products`.`ean` = `products`.`products_ean`
Run Code Online (Sandbox Code Playgroud)

我明确地想要使用左连接.但是查询需要花费更多的时间.

我试图将连接更改为INNER JOIN.查询现在非常快,但结果不是我需要的.

我使用了解释并得出以下结论:

如果我使用"LEFT JOIN",那么查询的EXPLAIN会导致......

type: "ALL"
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 90.000 / 50.000 (the full number of the corresponding table)
Run Code Online (Sandbox Code Playgroud)

......对于两张桌子.

如果我使用"INNER JOIN",那么EXPLAIN会给出:

对于表"产品":

Same result as above.
Run Code Online (Sandbox Code Playgroud)

对于表"pricemaster_products":

type: "ref"
possible_keys: "ean"
key: ean
key_len: 767
ref: func
rows: 1
extra: using where
Run Code Online (Sandbox Code Playgroud)

两个表都在相关列上设置了索引.我想到LEFT JOIN如此缓慢的唯一可能原因是根本不使用索引.但为什么不呢?

表结构如下:

CREATE TABLE IF NOT EXISTS `pricemaster_products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `provider` …
Run Code Online (Sandbox Code Playgroud)

mysql join inner-join left-join

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