我有一个表,hs_book
其中有一列名为GENRE_ID
我从一个名为的表中获取该类型的描述GENRE
我的列子查询Genre
:
SELECT *,
Genre = (
SELECT DESCRIPTION
FROM GENRE
WHERE GENRE_ID = (
SELECT TOP 1 GENRE_ID
FROM BOOK_GENRES
WHERE BOOK_ID = hs_book.BOOK_ID
)
)
FROM hs_book
Run Code Online (Sandbox Code Playgroud)
当我执行此查询时,我得到 525 本书(这是正确的)。
应高级 DBA 的要求,我尝试将其转换为 JOIN,这样我就不需要子查询,所以我这样做了:
SELECT * FROM hs_book hsb
INNER JOIN BOOK_GENRES bg ON hsb.BOOK_ID = bg.BOOK_ID
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了 541 个结果,比子查询多了 16 个结果。
经过查资料,我发现有些书有多个GENRE_IDs
.
有没有办法修改我的加入,以便我只为每本书返回一种类型?
我正在使用 2 个表:1 个表处理一组人的基本人口统计数据,1 个表处理已完成的活动。我需要做的是从人口统计表中提取所有结果(所有人),然后显示在给定时间范围内完成某种类型活动的任何人的活动信息(给定的人也可能完成了多项活动)在那个时间范围内)。如果某人尚未完成任何指定的活动,我仍然希望他们在列表中可见。我希望结果如下所示:
PersonID Name DateOfBirth ActivityDate ActivityType
---------------------------------------------------------------------
1001 John Smith 01/01/1990 10/18/2022 Painting
1002 Jane Doe 12/31/1980 NULL NULL
1003 Bob Brown 07/04/1995 10/17/2022 Reading
1003 Bob Brown 07/04/1995 09/09/2022 Painting
1004 Mike Jones 03/24/1984 NULL NULL
1005 Ann Green 11/30/1988 08/29/2022 Writing
1006 Sally Black 05/15/1999 NULL NULL
Run Code Online (Sandbox Code Playgroud)
看起来这应该是LEFT JOIN
两个表之间非常简单的查询:
SELECT DISTINCT
d.PersonID,
d.Name
d.DateOfBirth,
a.ActivityDate
a.ActivityType
FROM Demographics d
LEFT JOIN Activity a ON d.PersonID = a.PersonID
WHERE ActivityDate BETWEEN DATEADD(yy,-1,GETDATE()) AND …
Run Code Online (Sandbox Code Playgroud) 可能重复:
MySQL从多个表中删除行
我有5张桌子:
当我删除该成员时,我想从这些表中删除他的所有记录.member_id
存在于所有表中.我这样做每个表有5个查询.我可以LEFT JOIN
在一个查询中使用或类似的内容吗?
我必须编写一个代码,可以将文本框中的三个字符串值连接到一个日期时间值.
例如:textbox1.text是我的日期值.想想,我写05.textbox2.text是我的mounth值.想想,我写06.textbox3.text是我的年份价值.想想,我写1991年.
然后我必须加入这三个值.它变成了这个05.06.1991所以我可以将此值插入我的数据库.非常感谢.
我是Python的新手,并且有一个由名字分隔的名单\and
,我需要加入,用逗号分隔第一个,用'和'分隔最后一个.但是,如果有超过4个名称,则返回值应该是第一个名称以及短语"et al.".所以,如果我有
authors = 'John Bar \and Tom Foo \and Sam Foobar \and Ron Barfoo'
Run Code Online (Sandbox Code Playgroud)
我应该得到'约翰巴尔等人'.而与
authors = 'John Bar \and Tom Foo \and Sam Foobar'
Run Code Online (Sandbox Code Playgroud)
我应该得到'John Bar,Tom Foo和Sam Foobar'.
它也应该只使用一个作者名称,单独返回该单个名称(和姓氏).
我试过做类似的事情
names = authors.split('\and')
result = ', '.join(names[:-1]) + ' and '.join(names[-1])
Run Code Online (Sandbox Code Playgroud)
但这显然不起作用.所以我的问题是我如何使用join
和split
得到第一个作者用逗号分隔,最后用'和'考虑如果有超过四个作者,只有第一个作者名称应该与'等人'一起返回. .
按我的理解,FULL OUTER JOIN
是的组合LEFT OUTER JOIN
和RIGHT OUTER JOIN
.在这种情况下,它只是连接两个表与所有条目.请让我知道为什么我们给出" ON
"条款FULL OUTER JOIN
?或者解释如何应用ON子句或者它在查询中有什么区别?
例如:查询:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
Run Code Online (Sandbox Code Playgroud) 我有一个表用户(用户 ID、用户名、密码等)、一个表课程(课程 ID、课程名称等)和一个表 student_favouriteCourses(用户 ID、课程 ID)//两者都作为主键
如果我知道用户的 ID,我想搜索他最喜欢的所有课程。你能帮我查询加入吗?
我正在使用join从表中获取一些数据,
SELECT da.aName AS aName FROM dbo.bTable
INNER JOIN aTable da ON dbo.bTable.nameType = da.ID"
Run Code Online (Sandbox Code Playgroud)
这个选择有效.但是如果nameType是一个不在da.ID中的新数字,则根本不显示该行.我想要的是将这些连接到表,但如果aTable根本不包含这样的数字,那么必须采取一些默认值.
这是一个例子.aTable是名称表
id=1 aName = bmw
id=2 aName= mersedes
id=3 aName= audi
Run Code Online (Sandbox Code Playgroud)
bTable有汽车清单,我必须全部拿到
1 nameType =1
2 nameType =2
3 nameType =3
4 nameType =5
Run Code Online (Sandbox Code Playgroud)
所以我必须展示所有4辆车.使用我的代码我只会显示3,因为4号汽车的nameType是5.而且aTable中没有这样的ID.结果将是
1辆车是宝马
2辆车是mersedes
3辆车是奥迪
我想要做的是在这种情况下aTable给出一些NULL值或类似的结果必须是这样的
1辆车是宝马
2辆车是mersedes
3辆车是奥迪
4车是NULL
我想集合数据从一个CSV文件到另一个,使用命令行工具,如bash
,sed
,awk
等等中的每个文件中的每一行与一个唯一的ID开始在第1列,并且如果在所述目的地的行该ID相匹配,则行应该被替换,否则应该附加。输入数据未排序,但结果的排序顺序无关紧要,因此如果有帮助,文件可以作为脚本的一部分进行排序。
例如,给定当前状态aggregate.csv
:
1,olddata
3,olddata
2,olddata
Run Code Online (Sandbox Code Playgroud)
和文件new.csv
:
4,newdata
2,changeddata
3,changeddata
Run Code Online (Sandbox Code Playgroud)
我想aggregate.csv
出来如下(以任何排序顺序):
1,olddata
2,changeddata
3,changeddata
4,newdata
Run Code Online (Sandbox Code Playgroud)
这些行可能包含大量列,因此一次替换一个单元格并不理想。CSV 保证不包含引用的换行符,因此逐行搜索并一次替换整行是一种有效的方法。
抱歉,如果这是重复的,但我找不到另一个完全使用这种 CSV 合并方法的问题。
我已经尝试调整这个问题的答案,但它首先需要通过逐行解析两个文件、排序、删除重复项和保存来生成所有 ID 的“模板文件”——我希望有一种更简单的方法是可能的。
这个问题在 sed 和 awk 中有答案,我也复制了这些答案,并管理了正则表达式替换部分,但不是在不存在匹配的情况下向文件追加新行的方法。
谢谢!
我需要这样的查询;
select a.*, b.column1 from table1 a
inner join table2 b on (b.id in (id_array))
Run Code Online (Sandbox Code Playgroud)
此查询不返回任何内容
我想做什么:我从table1中检索id组.然后从table2获取这些id的名称列.所以,我使用内连接.
join ×10
sql ×5
sql-server ×3
c# ×2
mysql ×2
asp.net ×1
awk ×1
bash ×1
command-line ×1
datetime ×1
if-statement ×1
inner-join ×1
left-join ×1
oracle ×1
php ×1
python ×1
sed ×1
sql-delete ×1
string ×1
t-sql ×1