我有几张桌子,展览,语言,表格和问题。问题的桌子上有一个lang_id和form_id,而展览在桌子上有一个form_id。我想选择链接到表单的语言。唯一为人所知的就是展览id。这是怎么做的?
使用已知的展览id,您可以从展览表中获得form_id。然后,您可以从该form_id中选择问题,使用该数据,您可以检查哪些语言被链接到这些问题。但是如何完成这个查询呢?
这里有一个sqlfiddle:http://sqlfiddle.com/#!9/bb726
我得到的查询是:
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;发布于 2015-07-09 07:54:06
我没有使用你的小提琴,因为你很好地描述了这个问题,所以查询非常简单。
您需要更好地构建表和列的名称。有了一个好看的模式,您所描述的查询如下:
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下面是使用小提琴的查询:
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
id name
4 German使用其他展览app_exhibition.id = 5的更多结果
id name
7 Dutch
2 English一些提示:
注意:exhibition和question引用的是字段formId,因此,如果不需要该表中的进一步信息,则可以省略表form上的联接:
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 = 4https://stackoverflow.com/questions/31310996
复制相似问题