标签: join

将WHERE子句与NATURAL JOIN SQL结合使用?

我正在阅读一本关于SQL的书,我被困在一个与数据库模式相关的示例中,如下图所示. 数据库模式

下面的示例解决了书中所述的查询:

假设我们希望回答查询"列出教师的名字以及他们教授的课程的标题."查询可以用SQL编写,如下所示:

select name , title
from instructor natural join teaches , course
where teaches.course id = course.course id;
Run Code Online (Sandbox Code Playgroud)

现在这本书说明了这一点

"请注意,where子句中的teaches.course id指的是自然连接结果的课程id字段,因为该字段又来自教学关系."

这本书再次在BOLD中说:

"不可能使用包含原始关系名称的属性名称(例如instructor.name或teaches.course id)来引用自然连接结果中的属性;但是,我们可以使用属性名称,例如名称和课程ID ,没有关系名称."

(参考上面的查询)如果不可能,那么作者如何能够将查询编写为

teaches.course id = course.course id
Run Code Online (Sandbox Code Playgroud)

如何将teaches.course引用自然连接属性"课程",作者如此模糊地提出了他的论点.请向我解释作者的观点.

mysql sql join

0
推荐指数
1
解决办法
479
查看次数

Codeigniter基于两个连接条件连接两个表

我正在使用代码点火器实现连接查询.我有两张桌子

 1) Users -> Contains all users
 2) Query -> Contains queries assigned to users. Each query has two users to attend that query.
Run Code Online (Sandbox Code Playgroud)

在Queries表中,我有两列

 1) attendingMD -> First user attending that query
 2) secondAttendingMD -> Second user that query.
Run Code Online (Sandbox Code Playgroud)

我想显示查询列表以及参与该查询的两个用户的名称.我设法通过使用此代码获得第一个用户的名称.

  $this->db->select("Query.*, Users.fullname as firstMD");
  $this->db->join('Users', 'Users.id = Query.attendingMD');
  $this->db->where('Query.isCompleted', 1);
  $query = $this->db->get('Query');
  return $query->result_array(); 
Run Code Online (Sandbox Code Playgroud)

请建议我如何实现这一目标.这是我想要显示的表的视图.在此输入图像描述

php mysql sql-server join codeigniter

0
推荐指数
1
解决办法
1097
查看次数

在sql中计数 - 两个表

我有两个表:团队(id,name)和用户(id,name,team_id)

我想得到以下结果:

Team  | Members 
team1 | 10 
team2 | 14 
team3 | 8
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT t.name AS 'Team', COUNT(u.email) AS 'Members' FROM teams t INNER JOIN users u ON (u.team_id = t.id) 
Run Code Online (Sandbox Code Playgroud)

但它不会起作用.

mysql sql join count

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

使用DESC的SQL查询无法正常工作

我不会理解为什么排序不能正常使用"ORDER BY average,votes DESC",因为我需要最高的平均值并且投票从上到下,但是DESC没有解决什么问题.我在var_dump http://pastie.org/private/b05smuh0fvw72wwp2w1zq最高entrie的结果在底部,但我需要从顶部开始并且到底部.

SELECT c.*, r.votes, c.total_comments,
       ROUND(sumrate / votes) AS average
FROM catalog c LEFT JOIN
     (SELECT r.object_id, COUNT(*) as votes, SUM(r.rate) as sumrate
      FROM ratings r
      GROUP BY r.object_id
     ) r
     ON r.object_id = c.catalog_id LEFT JOIN
     (SELECT c.catalog_id, COUNT(*) as total_comments
      FROM comments c
      GROUP BY c.catalog_id
     ) c
     ON c.catalog_id = c.catalog_id
GROUP BY c.catalog_id
ORDER BY average, votes DESC;
Run Code Online (Sandbox Code Playgroud)

mysql sql sorting join

0
推荐指数
1
解决办法
58
查看次数

如何在sql server中连接三个表

我有三张桌子:

  • 章(章节,描述)
  • 课程(LessonNO,Dec,ChapterNo)
  • 案例(CaseNo,Desc,LessonNo)

如您所见,这三个表都已连接.我想要的是返回所有章节(即使没有课程),所有课程(即使没有案例)和所有案例.

我很遗憾地说,但我真的没有想法所以我没有示例代码.我希望我的解释已经足够了.

sql sql-server join

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

内连接与左连接 - 对于相同的结果更快?

如果内连接和左连接都可以实现相同的结果,哪一个更快并且具有更好的性能(特别是对于大数据)?

内部联接:

SELECT *
FROM Table_A A
INNER JOIN Table_B B
ON A.PK_A = B.PK_B
Run Code Online (Sandbox Code Playgroud)

左连接:

SELECT *
FROM Table_A A
LEFT JOIN Table_B B
ON A.PK_A = B.PK_B

WHERE A.PK_A = B.PK_B
Run Code Online (Sandbox Code Playgroud)

表A:

PK_A    User
1   FOX
2   COP
3   TAXI
6   WASHINGTON
7   DELL
5   ARIZONA
4   LINCOLN
10  LUCENT
Run Code Online (Sandbox Code Playgroud)

表-B:

PK_B    Message
1   TROT
2   CAR
3   CAB
6   MONUMENT
7   PC
8   MICROSOFT
9   APPLE
11  SCOTCH
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?如何测试大数据的性能?

mysql sql join inner-join left-join

0
推荐指数
1
解决办法
4969
查看次数

Python:在一个列表列表中加入每个元素不同的列表列表

我想加入许多不同列表列表的相同索引元素,并获得连接元素列表的列表.列表总是具有相同的长度.这是一个更容易理解的例子.

list1 = [[1, 0], [1, 0], [1, 0], [0, 1]]

list2 = [[2, 1], [2, 1], [1, 2], [3, 2]]
Run Code Online (Sandbox Code Playgroud)

结果我想获得:

LIST = [[1,0,2,1],[1,0,2,1],[1,0,1,2],[0,1,3,2]]
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

python join list

0
推荐指数
1
解决办法
61
查看次数

基于多个驻留表创建新字段

给定多个驻留表,我想基于不同表中的字段创建一个新字段.

table1:
LOAD * INLINE [
id1,val1
a1,car1
a2,car1
];

table2:
LOAD * INLINE [
id2,id1,val2
b1,a1,type1
b2,a2,type2
];

table3:
LOAD * INLINE [
id3,id2,val3
c1,b1,mfr1
c2,b2,mfr2
];
Run Code Online (Sandbox Code Playgroud)

为了参数,假设table1有~1M行,table2~1K行和table3~10行.我想创建一个新字段,该字段可以添加到table1或者可能在链接的新表中id1,从而导致:

id1  val1  newval
a1   car1  car1type1mfr1
a2   car2  car2type2mfr2
Run Code Online (Sandbox Code Playgroud)

努力:

newtable:
load val1 & val2 & val3 as newval;
Run Code Online (Sandbox Code Playgroud)

没有错误,但没有newtablenewval.

newtable:
left join (table2)
load val1&val2 as newval resident table1;
Run Code Online (Sandbox Code Playgroud)

Errs with Field not found - <val2> …

join qlikview

0
推荐指数
1
解决办法
4063
查看次数

如何加快多个连接的SQL查询执行速度?

我正在使用MySql数据库.我需要将多个(超过10个)表格中的信息合并为一个表格.为了做到这一点,我遵循典型的加入方式.

Select * from 
table_1 
Join table_2
on(table_1.id = table_2.id)
Join table_3
on(table_1.id = table_3.id)
Run Code Online (Sandbox Code Playgroud)

它有效,但在执行期间我受了很多苦.有没有其他好方法来优化我的代码?以下是我的代码示例:

SELECT
distinct 
u.Id, 
oc.dt,
Daily_Number_Outgoing_Calls,     
Daily_Number_Incoming_Calls,    
Daily_duration_Outgoing_Calls

FROM
creditfix.users u

JOIN

#1 Daily_No_Out_Calls
    (
        SELECT
        cl.uId,SUBSTRING(DATE,1,10) as dt,
        count(1) as Daily_Number_Outgoing_Calls

        From creditfix.call_logs as cl
            WHERE
                cl.`type`=2 #out going calls only
        GROUP by cl.uId,dt
    ) oc
    ON (u.Id=oc.Uid)

#2 Daily_No_In_Calls
    JOIN
    (
        SELECT
        cl.uId, SUBSTRING(DATE,1,10) as dt,
        count(1) as Daily_Number_Incoming_Calls
        From creditfix.call_logs as cl
        WHERE
            cl.`type`=1 #incoming calls only
        GROUP by cl.uId,dt
    ) ic …
Run Code Online (Sandbox Code Playgroud)

mysql sql join subquery dbeaver

0
推荐指数
1
解决办法
124
查看次数

将元素连接到数组中并与空格分开

我想加入第一个到第16个单词和第17个到第31个等,在一个数组中,空格到一行,但不知道为什么代码不起作用.希望在这里得到帮助.谢谢

my @file = <FILE>;
for ( $i=0; $i<=$#file; $i+=16 ){
    my $string = join ( " ", @file[$i..$i+15] );
    print FILE1 "$string\n";
}
Run Code Online (Sandbox Code Playgroud)

以下是我档案的一部分.

1
2
3
...
Run Code Online (Sandbox Code Playgroud)

我要打印的是

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
17 18 19 20 21....
Run Code Online (Sandbox Code Playgroud)

perl join

0
推荐指数
1
解决办法
351
查看次数

标签 统计

join ×10

mysql ×6

sql ×6

sql-server ×2

codeigniter ×1

count ×1

dbeaver ×1

inner-join ×1

left-join ×1

list ×1

perl ×1

php ×1

python ×1

qlikview ×1

sorting ×1

subquery ×1