交叉连接在两组元组上执行笛卡尔积.
SELECT *
FROM Table1
CROSS JOIN Table2
Run Code Online (Sandbox Code Playgroud)
哪种情况下这样的SQL操作特别有用?
我有两个表,一个用于新闻,另一个用于评论,我想得到其状态已被批准的评论的计数.
SELECT
ccc_news . *,
count(if(ccc_news_comments.id = 'approved', ccc_news_comments.id, 0)) AS comments
FROM
ccc_news
LEFT JOIN
ccc_news_comments
ON ccc_news_comments.news_id = ccc_news.news_id
WHERE
`ccc_news`.`category` = 'news_layer2'
AND `ccc_news`.`status` = 'Active'
GROUP BY
ccc_news.news_id
ORDER BY
ccc_news.set_order ASC
LIMIT 20
Run Code Online (Sandbox Code Playgroud)
但是这个查询的问题是,对于该列提取的最小值是1是否存在与该消息相对应的任何注释.
任何帮助都会非常值得赞赏.
我最近升级到了VS 2010,正在玩LINQ to Dataset.我有一个强大的类型化的Authorization数据集,它位于ASP.NET WebApplication的HttpCache中.
所以我想知道实际上检查用户是否有权做某事的最快方法.如果有人感兴趣的话,这是我的数据模型和其他一些信息.
我检查了3种方法:
这些是每个函数1000次调用的结果:
1.Iteration:
2.Iteration:
3.Iteration:
平均:
为什么Join-version比where-syntax快得多,这使得它无用尽管作为LINQ新手它似乎是最清晰的.或者我在查询中遗漏了什么?
这是LINQ查询,我跳过数据库:
地点:
Public Function hasAccessDS_Where(ByVal accessRule As String) As Boolean
Dim userID As Guid = DirectCast(Membership.GetUser.ProviderUserKey, Guid)
Dim query = From accRule In Authorization.dsAuth.aspnet_AccessRule, _
roleAccRule In Authorization.dsAuth.aspnet_RoleAccessRule, _
role In Authorization.dsAuth.aspnet_Roles, _
userRole In Authorization.dsAuth.aspnet_UsersInRoles _
Where accRule.idAccessRule = roleAccRule.fiAccessRule …Run Code Online (Sandbox Code Playgroud) 例如(不确定是否最具代表性的例子):
N <- 1e6
d1 <- data.frame(x=sample(N,N), y1=rnorm(N))
d2 <- data.frame(x=sample(N,N), y2=rnorm(N))
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所得到的:
d <- merge(d1,d2)
# 7.6 sec
library(plyr)
d <- join(d1,d2)
# 2.9 sec
library(data.table)
dt1 <- data.table(d1, key="x")
dt2 <- data.table(d2, key="x")
d <- data.frame( dt1[dt2,list(x,y1,y2=dt2$y2)] )
# 4.9 sec
library(sqldf)
sqldf()
sqldf("create index ix1 on d1(x)")
sqldf("create index ix2 on d2(x)")
d <- sqldf("select * from d1 inner join d2 on d1.x=d2.x")
sqldf()
# 17.4 sec
Run Code Online (Sandbox Code Playgroud) 我有一个使用SQLite数据库的应用程序,一切都按照应有的方式工作.我现在正在添加需要第二个SQLite数据库的新功能,但我很难弄清楚如何从不同的数据库连接表.
如果有人可以帮我解决这个问题,我真的很感激!
编辑:请参阅此问题以获取示例案例,您可以在附加数据库时调整您的语言,如接受的答案中所述.
我试过了 :
UPDATE closure JOIN item ON ( item_id = id )
SET checked = 0
WHERE ancestor_id = 1
Run Code Online (Sandbox Code Playgroud)
和:
UPDATE closure, item
SET checked = 0
WHERE ancestor_id = 1 AND item_id = id
Run Code Online (Sandbox Code Playgroud)
两者都适用于MySQL,但那些在SQLite中给我一个语法错误.
如何使这个UPDATE/JOIN与SQLite版本3.5.9一起使用?
是否可以在没有ON语句的情况下编写连接查询?以及这些联接如何LEFT JOIN, RIGHT JOIN起作用.
为什么加入不好或'慢'.我知道我多听过一次.我找到了这个引用
问题是连接速度相对较慢,特别是在非常大的数据集上,如果它们很慢,那么您的网站速度很慢.从磁盘上获取所有这些独立的信息并将它们全部放在一起需要很长时间.
我一直认为他们特别快,特别是在查找PK时.他们为什么"慢"?
结果有什么不同:
你能通过一些例子解释一下吗?
例如,如果我有一个表"Person",其列"id"引用表"Worker"中的列"id"
这两个查询之间有什么区别?它们产生相同的结果.
SELECT *
FROM Person
JOIN Worker
ON Person.id = Worker.id;
Run Code Online (Sandbox Code Playgroud)
和
SELECT *
FROM Person,
Worker
WHERE Person.id = Worker.id;
Run Code Online (Sandbox Code Playgroud)
谢谢
join ×10
sql ×5
mysql ×3
database ×2
left-join ×2
performance ×2
right-join ×2
sqlite ×2
.net ×1
count ×1
data.table ×1
if-statement ×1
inner-join ×1
linq ×1
merge ×1
outer-join ×1
r ×1
sql-update ×1
syntax ×1