我有这三张桌子:
fieldValues|values|formCustomizeValues |
-----------|------|--------------------|
FieldID |ID |FormCustomizeFieldID|
ValueID |Name |FieldID |
| |ValueID |
-----------|------|--------------------|
这些表格的数据如下所示:
fieldValues|values|formCustomizeValues|
-----------|------|-------------------|
4 |1 |1 |
1 |James |4 |
-----------|------|3 |
4 |2 |-------------------|
2 |Ben |
-----------|------|
|3 |
|Daniel|
我要做的是获取特定字段的所有值。
所以我想说我想要使用等于FieldID
的{{1}}获取所有值,我应该得到:
4
但我尝试了5个不同的查询,我得到的唯一内容是James
Ben
Daniel
或James, Ben
。
这是一个返回零Daniel
的查询:
results
该查询只返回SELECT v.* FROM `fieldValues` fv
LEFT JOIN `values` v ON fv.ValueID = v.ID
LEFT JOIN formCustomizeValues fcv ON fcv.FieldID = fv.FieldID AND fcv.ValueID = v.ID
WHERE fv.FieldID = 4 AND fcv.FormCustomizeFieldID = 1
:
James, Ben
我如何将它们全部组合在一起? 任何帮助将不胜感激!! 谢谢!
这是SQLfiddle链接:http://sqlfiddle.com/#!2/43b56/1
答案 0 :(得分:1)
这就是你想要的:
查询:
SELECT
v.`Name`
FROM
`values` v
INNER JOIN `fieldValues` as fv
on v.`ID` = fv.`ValueID`
and fv.`FieldID` = 4
UNION
SELECT
v.`Name`
FROM
`values` v
INNER JOIN `formCustomizeValues` as fcv
on v.`ID` = fcv.`ValueID`
and fcv.`FieldID` = 4
答案 1 :(得分:0)
撇开对架构设计的任何批评......
SELECT v.name
FROM `values` v
LEFT JOIN `fieldValues` fv ON fv.ValueID = v.ID
LEFT JOIN `formCustomizeValues` fcv ON fcv.ValueID = v.ID
WHERE fv.FieldID = 4
OR fcv.FormCustomizeFieldID = 1
;
更新
我现在看到你说的第一个查询导致没有行实际上非常接近。您希望values
或 fieldValues
中定义的所有formCustomizeValues
行。使用AND
不会产生任何行,因为没有行符合这两个条件。因此,您希望使用OR
或使用UNION
,如Ryx5所建议的那样。
SELECT v.name
FROM `values` v
LEFT JOIN `fieldValues` fv ON fv.ValueID = v.ID
LEFT JOIN `formCustomizeValues` fcv ON fcv.ValueID = v.ID
WHERE fv.FieldID = 4
OR fcv.FormCustomizeFieldID = 1
;