如何最好地构建此数据库查询?

时间:2017-08-08 11:03:58

标签: mysql sql database

我正在寻找一种将查询框架到数据库的方法。这是场景。 我有3个tablestagssentenceTagssentencestags的字段为idname,这是标记的名称。 sentenceTagssentenceIdtagId作为外键,其他字段如createdAt(对我的问题不是很重要)。

现在,我通过API获取搜索请求,以返回标记为books的句子。所以我必须在tags表中搜索名称字段等于books的条目并返回id。使用此id我需要按顺序查询sentenceTags表,然后查询sentences表。

我想过使用多个select语句,因为我无法想到如何{3}} 3个表。或许join。我的问题是:进行此类查询的更好方法是什么?我只是需要一些线索或一些如何做到这一点的提示。

3 个答案:

答案 0 :(得分:1)

只需使用加入2次,您的查询将如下所示:

select * from tags t join sentenceTags st on t.id=st.tagId join sentences s on st.sentenceId=s.id where t.name='books';

答案 1 :(得分:1)

这是加入它们的最简单方法:

Private Sub CopyPasteRange()

    Dim Rng As Range
    Dim Arr As Variant

    With Range("Candidatures")
        Set Rng = .Range(.Cells(0, 1), .Cells(.Rows.Count - 1, 6))
    End With

    Debug.Print Rng.Address, Rng.Rows.Count, Rng.Columns.Count
    Arr = Rng.Value
    Debug.Print Lbound(Arr,1), Lbound(Arr, 2), Ubound(Arr,1), Ubound(Arr,2)
    Debug.Print Worksheets("RawData").Cells(2, 1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Address
    Worksheets("RawData").Cells(2, 1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
End Sub

答案 2 :(得分:1)

实际上sentenceTag表是连接tagssentence的中间表。您sentenceId来自sentencetagsId来自tag表格。

您只需要从所有表格中选择使用JOIN:

SELECT *
FROM 
    tags
JOIN
    sentenceTags
ON
    tags.id = sentenceTags.tagID
JOIN
    sentence
ON
    sentence.id = sentenceTags.sentenceId
WHERE
    tags.name = 'Books'