【问题标题】:Join three tables MySQL Where连接三个表 MySQL Where
【发布时间】:2017-12-19 18:59:02
【问题描述】:

首先,我意识到还有其他类似的问题,我已经阅读了很多,但我无法弄清楚。

我有三张这样的桌子。

urilist
----------------
rowid | uri
1000      xyz
1001      abc
1002      cde
1003      fgh

wordlist
----------------
rowid | word
1      word1
2      word2
3      word3
4      word4

wordlocation2
----------------
uriid | wordid
1001      1
1001      2
1001      3
1001      4

表一个hold uris。表 b 包含单词。表 c 是一个查找表,您可以在其中查看与 uri 关联的每个单词,反之亦然。

我需要返回给定 uri 的单词。所以对于 uri abc 我需要文字 word1,word2,word3,word4

这是我最近的尝试。

select word from wordlist join wordlocation2 on wordlist.rowid = 

wordlocation2.wordid 
left join urilist on wordlocation2.uriid = urilist.rowid 
and urilist.uri =  "a uri address";

这返回了数千个不相关的答案。我不确定执行此操作的最佳方法。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql join where


    【解决方案1】:

    让我们通过选择 * 来查看您的查询结果。我使用了你给出的“一个 uri 地址”来演示关于 LEFT JOIN

    查询:

    select * from wordlist join wordlocation2 on wordlist.rowid = wordlocation2.wordid left join urilist on wordlocation2.uriid = urilist.rowid and urilist.uri =  "a uri address";
    

    这将获取以下结果

    正如你已经完成了wordlocation2 LEFT JOIN urilist,即使urilist没有匹配的行,通过将urilist值设为NULL(这就是左连接的含义),结果中也会出现一个值。在你的情况下,如果没有匹配的行,你不应该得到任何值。因此,请使用 JOIN 而不是 LEFT JOIN。

    select * from wordlist join wordlocation2 on wordlist.rowid = wordlocation2.wordid join urilist on wordlocation2.uriid = urilist.rowid where urilist.uri =  "abc";
    

    我认为表格的顺序并不重要,因为这里的一切都是内部联接。如果有人对此提出建议,我随时准备纠正自己。

    【讨论】:

      【解决方案2】:

      这应该是您的查询:

      select l.word from urilist u
      join wordlocation2 w on w.uriid = u.rowid
      join wordlist l on l.rowid = wordid
      where u.uri = 'some_uri'
      

      【讨论】:

        【解决方案3】:

        用途:

        select u.uri, wl.word
        from urilist u
        join wordlocation2 wl2 on wl2.uriid = u.id
        join wordlist wl on wl2.wordid = wl.rowid
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 2012-05-02
          • 2013-07-13
          相关资源
          最近更新 更多