LEFT JOIN和之间有什么区别LEFT OUTER JOIN?
我知道SQL Server中的连接.
例如.Table1,Table2有两个表.
他们的桌子结构如下.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Run Code Online (Sandbox Code Playgroud)
表1数据如下:
Id Name
-------------
1 A
2 B
Run Code Online (Sandbox Code Playgroud)
表2数据如下:
Id Name
-------------
1 A
2 B
3 C
Run Code Online (Sandbox Code Playgroud)
如果我执行下面提到的两个SQL语句,则两个输出都是相同的
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Run Code Online (Sandbox Code Playgroud)
请解释上述SQL语句中左右连接的区别.
我有两个表,一个用于工作截止日期,一个用于描述工作.每个作业都可以处于状态,一些状态意味着必须从另一个表中删除作业的截止日期.
我可以通过以下方式轻松SELECT完成符合我标准的工作/截止日期LEFT JOIN:
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
Run Code Online (Sandbox Code Playgroud)
(不status属于job表格deadline)
但是当我想删除这些行时deadline,MySQL会抛出错误.我的查询是:
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
Run Code Online (Sandbox Code Playgroud)
MySQL错误没有说明:
您的SQL语法有错误; …
我在使用LINQ to SQL找出如何使用多个左外连接时遇到了一些麻烦.我理解如何使用一个左外连接.我正在使用VB.NET.下面是我的SQL语法.
T-SQL
SELECT
o.OrderNumber,
v.VendorName,
s.StatusName
FROM
Orders o
LEFT OUTER JOIN Vendors v ON
v.Id = o.VendorId
LEFT OUTER JOIN Status s ON
s.Id = o.StatusId
WHERE
o.OrderNumber >= 100000 AND
o.OrderNumber <= 200000
Run Code Online (Sandbox Code Playgroud) 我有两个postgresql表:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
Run Code Online (Sandbox Code Playgroud)
我想得到每个login_log没有行的IP地址ip_location.
我尝试了这个查询,但它抛出了语法错误.
SELECT login_log.ip
FROM login_log
WHERE NOT EXIST (SELECT ip_location.ip
FROM ip_location
WHERE login_log.ip = ip_location.ip)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ERROR: syntax error at or near "SELECT" LINE 3: WHERE NOT EXIST (SELECT ip_location.ip`
我也想知道这个查询(通过调整使其工作)是否是用于此目的的最佳性能查询.
我需要从设置表中检索所有默认设置,但如果存在x字符,还需要获取字符设置.
但是此查询仅检索字符= 1的那些设置,而不是用户未设置任何人的默认设置.
SELECT `settings`.*, `character_settings`.`value`
FROM (`settings`)
LEFT JOIN `character_settings`
ON `character_settings`.`setting_id` = `settings`.`id`
WHERE `character_settings`.`character_id` = '1'
Run Code Online (Sandbox Code Playgroud)
所以我应该需要这样的东西:
array(
'0' => array('somekey' => 'keyname', 'value' => 'thevalue'),
'1' => array('somekey2' => 'keyname2'),
'2' => array('somekey3' => 'keyname3')
)
Run Code Online (Sandbox Code Playgroud)
其中,当键0包含具有字符值的默认值时,键1和键2是默认值.
我读了许多关于只获得左连接的第一行的线程,但是,由于某种原因,这对我不起作用.
这是我的结构(当然简化)
饲料
id | title | content
----------------------
1 | Feed 1 | ...
Run Code Online (Sandbox Code Playgroud)
艺术家
artist_id | artist_name
-----------------------
1 | Artist 1
2 | Artist 2
Run Code Online (Sandbox Code Playgroud)
feeds_artists
rel_id | artist_id | feed_id
----------------------------
1 | 1 | 1
2 | 2 | 1
...
Run Code Online (Sandbox Code Playgroud)
现在我想获得文章并加入第一位艺术家,我想到了这样的事情:
SELECT *
FROM feeds
LEFT JOIN feeds_artists ON wp_feeds.id = (
SELECT feeds_artists.feed_id FROM feeds_artists
WHERE feeds_artists.feed_id = feeds.id
LIMIT 1
)
WHERE feeds.id = '13815'
Run Code Online (Sandbox Code Playgroud)
只是为了获得feed_artists的第一行,但这已经不起作用了.
我无法使用TOP因为我的数据库而且我无法对结果进行分组,feeds_artists.artist_id因为我需要按日期对它们进行排序(我通过这种方式对结果进行分组,但结果不是最新的)
用OUTER …
鉴于:
以TABLE_1下列列命名的表:
IDColumnAColumnBColumnC我有SQL查询,其中TABLE_1对自己加入基于两次关闭的ColumnA,ColumnB,ColumnC.查询可能如下所示:
Select t1.ID, t2.ID, t3.ID
From TABLE_1 t1
Left Join TABLE_1 t2 On
t1.ColumnA = t2.ColumnA
And t1.ColumnB = t2.ColumnB
And t1.ColumnC = t2.ColumnC
Left Join TABLE_1 t3 On
t2.ColumnA = t3.ColumnA
And t2.ColumnB = t3.ColumnB
And t2.ColumnC = t3.ColumnC
... and query continues on etc.
Run Code Online (Sandbox Code Playgroud)
问题:
我需要在LINQ中重写Query.我试过去刺它:
var query =
from t1 in myTABLE1List // List<TABLE_1>
join t2 in myTABLE1List
on t1.ColumnA equals …Run Code Online (Sandbox Code Playgroud) 是否可以在没有ON语句的情况下编写连接查询?以及这些联接如何LEFT JOIN, RIGHT JOIN起作用.
结果有什么不同:
你能通过一些例子解释一下吗?
left-join ×10
join ×4
sql ×4
mysql ×3
right-join ×3
linq-to-sql ×2
outer-join ×2
sql-server ×2
t-sql ×2
c# ×1
delete-row ×1
exists ×1
inner-join ×1
linq ×1
null ×1
postgresql ×1
sql-delete ×1
vb.net ×1
where-clause ×1