当我规范化我的数据库时,我使用文本值将条目组合在一起,为它们提供相同的外键。但是,在规范化之前我还有2个其他字段,它们使用参考号将条目组合在一起,一个用于条目对,一个用于条目组。由于这些分组条目不一定具有相同的文本值,因此某些条目将被排除在分组之外(共享外键ID)。
我需要一个查询,选择共享PairRef或GroupRef的所有条目,其中该组中的条目都不具有相同的ForeignKeyID。
示例:
ID PairRef GroupRef ForeignKeyID TextValue (in linked table2)
1 25 25 123 'Text value 123'
2 25 25 255 'Text value 255'
3 1 50 201 'Text value 201'
4 1 50 201 'Text value 201'
5 2 50 202 'Text value 202'
6 2 50 202 'Text value 202'
7 3 50 203 'Text value 203'
8 3 50 203 'Text value 203'
然后,我需要能够编辑数据以将它们组合在一起。问题是,为了做到这一点,我需要查询来自多个表,因为我需要查看与外键关联的文本。我发现使用phpMyAdmin,虽然我可以使用内部联接从多个表创建查询,但是这些查询的结果无法按照来自一个表的查询的方式进行编辑。
我想替代方法是对查询结果进行更新查询。您能举例说明一种快速简便的查询结果更新查询方法,而不会丢失需要重复使用的原始查询。
在上面的例子中,对于重新组合共享相同PairRef的ID 1和ID 2,我需要物理地查看TextValue 123和255并且根据哪个是更合适的文本标签,我将决定哪个进入改变。假设“文本值123”是我想要为该分组保留的值。我会将ID 2更新为ForeignKeyID 123,这显然会自动将该条目的TextValue更改为“Text value 123”。
对于重新组合共享相同GroupRef的ID 3到8,如果我在查看数据后将其全部重新分组为“文本值201”,我会更改ID 5,6,7和8到ForeignKeyID = 201,它会自动将这些条目的所有TextValues更改为“Text Value 201”。
ID 1到8将不再出现在查询结果中,因为分组问题已经解决,并且它们将不再符合查询条件。
我需要找到最简单的方法来实现这一点,因为将条目组合在一起是数据库的主要目的之一,并且还有很多这样的编辑要做。
谢谢
答案 0 :(得分:0)
对于第一部分(选择共享PairRef
或GroupRef
的所有条目,其中该组中的条目不都具有相同的ForeignKeyID
),可以使用以下查询。它按PairRef
分组,并选择PairRef
个,其中ForeignKeyID
超过1个PairRef
。然后,选择具有这些GroupRef
的所有条目。同样,数据也按GroupRef
分组。选择了具有多于1个不同ForeignKeyID
的所有GroupRef
个。然后,选择具有这些SELECT
T1.*
FROM Table1 T1
INNER JOIN Table2 T2
ON T1.ForeignKeyID = T2.ForeignKeyID
WHERE PairRef IN
(
SELECT
PairRef
FROM table1
GROUP BY PairRef
HAVING Count(DISTINCT ForeignKeyID) > 1
)
OR GroupRef IN
(
SELECT
GroupRef
FROM table1
GROUP BY GroupRef
HAVING Count(DISTINCT ForeignKeyID) > 1
);
的所有条目。
TextValue
对于第二部分(编辑数据以将它们组合在一起),我不明白为什么您需要查看来自table2
的{{1}}(如果它与ForeignKeyID
相对应在table1
)。无论如何,一旦您看到具有不同PairRef
值的GroupRef
s / ForeignKeyID
,您就可以为每个PairRef
/ GroupRef
运行更新语句,因为它看起来像是一个手动过程。
UPDATE Table1
SET ForeignKeyID = <ForeignKeyID to be set>
WHERE PairRef = <PairRef to update>;
UPDATE Table1
SET ForeignKeyID = <ForeignKeyID to be set>
WHERE GroupRef = <PairRef to update>;
您可能需要再次运行第一个查询来检查数据,因为GroupRef
的UPDATE查询可能会导致PairRef
的值不同。
这是 SQL Fiddle demo 。谢谢@JohnLBevan的存根。