我在mysql中使用查询,但我是新手。我正在加入5个表,其中每个表都有一个标识符,一个表是主表。每个相关表可以具有多个与主表相关联的记录。我试图加入这些表,但我似乎无法摆脱重复的数据。
我希望显示所有相关记录,但我不希望主表中的数据显示在相关表中的所有结果中。我尝试了很多不同的方法但没有任何效果。目前我有4个查询适用于单独的表,但我没有成功加入它们,结果显示相关表中的多个记录,但只显示主表中的一个记录。
以下是我的个人查询:
SELECT
GovernmaxAdditionsExtract.AdditionDescr,
GovernmaxAdditionsExtract.BaseArea,
GovernmaxAdditionsExtract.Value
FROM
GovernmaxExtract
INNER JOIN GovernmaxAdditionsExtract
ON GovernmaxExtract.mpropertyNumber = GovernmaxAdditionsExtract.PropertyNumber
WHERE (((GovernmaxExtract.mpropertyNumber)="xxx-xxx-xx-xxx"));
SELECT
GovernmaxExtract.mpropertyNumber,
GovernmaxDwellingExtract.CardNumber,
GovernmaxDwellingExtract.MainBuildingType,
GovernmaxDwellingExtract.BaseArea
FROM
GovernmaxExtract INNER JOIN
GovernmaxDwellingExtract ON GovernmaxExtract.mpropertyNumber = GovernmaxDwellingExtract.PropertyNumber
WHERE (((GovernmaxExtract.mpropertyNumber)="xxx-xxx-xx-xxx"));
使用这些子查询,我试图将其中两个表放在一起,但现在我得到了所有记录并且它没有读取我的输入参数:
SELECT GE.mpropertynumber
FROM
GovernmaxExtract AS GE,
(SELECT
GovernmaxAdditionsExtract.AdditionDescr,
GovernmaxAdditionsExtract.BaseArea,
GovernmaxAdditionsExtract.Value
FROM GovernmaxExtract INNER JOIN
GovernmaxAdditionsExtract ON
governmaxextract.mpropertyNumber = GovernmaxAdditionsExtract.PropertyNumber) AS AE
WHERE GE.mpropertynumber = 'xxx-xxx-xx-xxx'
我尝试了嵌套查询,许多不同的连接,而我只是无法解决这个问题。我很确定我想要进行嵌套查询,因为我希望Governmax
表中的主数据显示一次主数据和所有记录以及相关表的所有信息。也许我错了。
我们的原始代码是:
SELECT
ge.*,
gde.*,
gfe.*,
gae.*,
goie.*
FROM governmaxextract AS ge
LEFT JOIN governmaxdwellingextract AS gde
ON ge.mpropertyNumber = gde.PropertyNumber
LEFT JOIN governmaxfeaturesextract AS gfe
ON gde.PropertyNumber = gfe.PropertyNumber
LEFT JOIN governmaxadditionsextract AS gae
ON gde.PropertyNumber = gae.PropertyNumber
RIGHT JOIN governmaxotherimprovementsextract AS goie
ON gde.PropertyNumber = goie.PropertyNumber
WHERE ge.mpropertyNumber = '$codeword'
ORDER BY goie.CardNumber
但是这会为主表提供关联表中每条记录的多行。我考虑过连接,但我需要单独显示相关表中的数据。不知道下一步该尝试什么。非常感谢任何帮助。
答案 0 :(得分:0)
抱歉,没有办法像你想的那样做。 JOIN不能那样做。
我建议使用单独的查询来保持解决方案。
Btw - 您可以使用UNION运算符, http://en.wikipedia.org/wiki/Union_(SQL)#UNION_operator
P.S。
您可以单独提取主数据,然后使用UNION一次从相关表中提取数据。使用UNIOM,它将在相关表中的每一行中给出一个结果行。
答案 1 :(得分:0)
为了将两个Detail表连接在一起而不生成重复行,您必须对每个表执行以下操作:
将主表的外键分组,并聚合投影到连接上的所有其他列。
数字列通常与SUM(),COUNT(),MAX()和MIN()聚合在一起。 MAX()和MIN()也适用于字符数据。对于这种情况,PIVOT操作有时也可用作聚合运算符。
一旦您以这种方式对两个详细信息表进行分组和聚合,它们将无需重复即可加入。通过首先以相同的方式对其进行分组和聚合,可以将其他详细信息表添加到连接中。