标签: join

如何修改内部联接,使其每个项目仅返回 1 行?

我有一个表,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.

有没有办法修改我的加入,以便我只为每本书返回一种类型?

t-sql sql-server join

-1
推荐指数
1
解决办法
59
查看次数

当不存在行时,LEFT JOIN 不返回 null

我正在使用 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)

sql sql-server join left-join

-1
推荐指数
1
解决办法
202
查看次数

从所有表中删除有关用户的所有内容

可能重复:
MySQL从多个表中删除行

我有5张桌子:

  • 会员
  • member_videos
  • member_photos
  • member_friends
  • member_pages

当我删除该成员时,我想从这些表中删除他的所有记录.member_id存在于所有表中.我这样做每个表有5个查询.我可以LEFT JOIN在一个查询中使用或类似的内容吗?

php mysql join sql-delete

-2
推荐指数
1
解决办法
870
查看次数

如何将三个字符串连接到单个日期时间值?

我必须编写一个代码,可以将文本框中的三个字符串值连接到一个日期时间值.

例如:textbox1.text是我的日期值.想想,我写05.textbox2.text是我的mounth值.想想,我写06.textbox3.text是我的年份价值.想想,我写1991年.

然后我必须加入这三个值.它变成了这个05.06.1991所以我可以将此值插入我的数据库.非常感谢.

c# asp.net string datetime join

-2
推荐指数
1
解决办法
126
查看次数

加入作者姓名,首先用逗号分隔,最后用"和"分隔

我是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)

但这显然不起作用.所以我的问题是我如何使用joinsplit得到第一个作者用逗号分隔,最后用'和'考虑如果有超过四个作者,只有第一个作者名称应该与'等人'一起返回. .

python join

-2
推荐指数
1
解决办法
1575
查看次数

为什么ON子句用于全外连接?

按我的理解,FULL OUTER JOIN是的组合LEFT OUTER JOINRIGHT 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)

sql sql-server oracle join

-2
推荐指数
1
解决办法
5749
查看次数

sql内部加入多对多关系

我有一个表用户(用户 ID、用户名、密码等)、一个表课程(课程 ID、课程名称等)和一个表 student_favouriteCourses(用户 ID、课程 ID)//两者都作为主键

如果我知道用户的 ID,我想搜索他最喜欢的所有课程。你能帮我查询加入吗?

sql join

-2
推荐指数
1
解决办法
6659
查看次数

SQL连接2个表,条件由于条件而采用一些默认的NULL值

我正在使用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

c# sql if-statement join inner-join

-2
推荐指数
1
解决办法
84
查看次数

使用命令行工具根据唯一 ID 聚合 CSV 数据

我想集合数据从一个CSV文件到另一个,使用命令行工具,如bashsedawk等等中的每个文件中的每一行与一个唯一的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 中有答案,我也复制了这些答案,并管理了正则表达式替换部分,但不是在不存在匹配的情况下向文件追加新行的方法。

谢谢!

bash awk command-line join sed

-2
推荐指数
1
解决办法
172
查看次数

如何在子句中使用内连接

我需要这样的查询;

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的名称列.所以,我使用内连接.

mysql sql join

-3
推荐指数
1
解决办法
176
查看次数