首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql从不同的表中选择ID

Mysql从不同的表中选择ID
EN

Stack Overflow用户
提问于 2015-07-09 07:36:51
回答 1查看 1.2K关注 0票数 3

我有几张桌子,展览,语言,表格和问题。问题的桌子上有一个lang_idform_id,而展览在桌子上有一个form_id。我想选择链接到表单的语言。唯一为人所知的就是展览id。这是怎么做的?

使用已知的展览id,您可以从展览表中获得form_id。然后,您可以从该form_id中选择问题,使用该数据,您可以检查哪些语言被链接到这些问题。但是如何完成这个查询呢?

这里有一个sqlfiddle:http://sqlfiddle.com/#!9/bb726

我得到的查询是:

代码语言:javascript
复制
SELECT f.id, f.name  
FROM app_languages f,
     app_exhibition b,
     app_vragen_translations v 
WHERE f.id = b.form_id
  AND b.id = 4
  AND v.lang_id;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 07:54:06

我没有使用你的小提琴,因为你很好地描述了这个问题,所以查询非常简单。

您需要更好地构建表和列的名称。有了一个好看的模式,您所描述的查询如下:

代码语言:javascript
复制
SELECT DISTINCT lang.id, lang.name  
FROM exhibition
    INNER JOIN form
        ON exhibition.formId = form.id
        INNER JOIN question
            ON form.Id = question.formId
            INNER JOIN translation
                ON translation.formId = form.id
                INNER JOIN lang
                    ON translation.langId = lang.id
WHERE exhibition.id = 4

下面是使用小提琴的查询:

代码语言:javascript
复制
SELECT DISTINCT app_languages.id, app_languages.name
FROM app_exhibition
    INNER JOIN app_forms
        ON app_exhibition.form_id = app_forms.id
        INNER JOIN app_vragen
            ON app_forms.id = app_vragen.form_id
            INNER JOIN app_vragen_translations
                ON app_vragen_translations.vraag_id = app_vragen.id
                INNER JOIN app_languages
                    ON app_vragen_translations.lang_id = app_languages.id
WHERE app_exhibition.id = 4

结果app_exhibition.id = 4

代码语言:javascript
复制
id  name
4   German

使用其他展览app_exhibition.id = 5的更多结果

代码语言:javascript
复制
id  name
7   Dutch
2   English

一些提示:

  • 使用简单的英语,不要使用当地的语言。这有很多原因,其中之一是在堆栈溢出时更容易得到答案。
  • 不要使用隐式联接( WHERE子句中的联接),而是使用JOIN子句。查询变得更加可读性,连接和过滤之间的区别是显而易见的。联接是用于连接,哪里是用于过滤。不能参加的地方。

注意:exhibitionquestion引用的是字段formId,因此,如果不需要该表中的进一步信息,则可以省略表form上的联接:

代码语言:javascript
复制
SELECT DISTINCT app_languages.id, app_languages.name
FROM app_exhibition
    INNER JOIN app_vragen
        ON app_exhibition.form_id = app_vragen.form_id
        INNER JOIN app_vragen_translations
            ON app_vragen_translations.vraag_id = app_vragen.id
            INNER JOIN app_languages
                ON app_vragen_translations.lang_id = app_languages.id
WHERE app_exhibition.id = 4
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31310996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档