我有以下表格:越來越多行與許多IDS
Action_set
id_action_p1 | id_action_p2 | id_action_p3 | etc.
1 | 1 | 2
2 | 3 | 1
1 | 1 | 1
Action
id_action | id_type | value
1 | 0 | NULL
2 | 1 | NULL
3 | 2 | NULL
凡id_action_p1/2/3
在Action_set
表是FKS至Action
表id_action
。
對於Action_set
中每行的每個id,我需要獲取Action
中的相應行。
例如,讓我們Action_set的第一行:
(id_action_p1 | id_action_p2 | id_action_p3)
1 | 1 | 2
必須給我的結果:
(id_type | value)
0 | NULL
0 | NULL
1 | NULL
我小白與MySQL,所以不知道該怎麼辦:(
編輯:這裏我表(忽略id_lap)
個CREATE TABLE IF NOT EXISTS `Action` (
`id_action` int(11) NOT NULL AUTO_INCREMENT,
`value` int(11) DEFAULT NULL,
`id_type` tinyint(4) NOT NULL,
PRIMARY KEY (`id_action`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
INSERT INTO `Action` (`id_action`, `value`, `id_type`) VALUES
(1, NULL, 0),
(2, NULL, 1),
(3, NULL, 2),
(4, NULL, 3),
(5, NULL, 4),
(6, NULL, 5);
CREATE TABLE IF NOT EXISTS `Action_set` (
`id_action_set` int(11) NOT NULL AUTO_INCREMENT,
`id_lap` int(11) NOT NULL,
`id_parent_action_set` int(11) DEFAULT NULL,
`id_action_pu` int(11) DEFAULT NULL,
`id_action_p1` int(11) DEFAULT NULL,
`id_action_p2` int(11) DEFAULT NULL,
`id_action_p3` int(11) DEFAULT NULL,
`id_action_p4` int(11) DEFAULT NULL,
`id_action_p5` int(11) DEFAULT NULL,
`id_action_p6` int(11) DEFAULT NULL,
`id_action_p7` int(11) DEFAULT NULL,
`id_action_p8` int(11) DEFAULT NULL,
`id_stage` tinyint(4) NOT NULL,
PRIMARY KEY (`id_action_set`),
KEY `fk_Action_set_Lap` (`id_lap`),
KEY `fk_Action_set_Action_set1` (`id_parent_action_set`),
KEY `fk_pu` (`id_action_pu`),
KEY `fk_p1` (`id_action_p1`),
KEY `fk_p2` (`id_action_p2`),
KEY `fk_p3` (`id_action_p3`),
KEY `fk_p4` (`id_action_p4`),
KEY `fk_p5` (`id_action_p5`),
KEY `fk_p6` (`id_action_p6`),
KEY `fk_p7` (`id_action_p7`),
KEY `fk_p8` (`id_action_p8`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11;
INSERT INTO `Action_set` (`id_action_set`, `id_lap`, `id_parent_action_set`, `id_action_pu`, `id_action_p1`, `id_action_p2`, `id_action_p3`, `id_action_p4`, `id_action_p5`, `id_action_p6`, `id_action_p7`, `id_action_p8`, `id_stage`) VALUES
(1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, 2, 2, 0),
(2, 1, 1, 1, 1, 1, 1, 2, 1, NULL, NULL, NULL, 0),
(3, 1, 2, NULL, NULL, NULL, NULL, NULL, NULL, 4, 4, 4, 1),
(4, 1, 3, NULL, NULL, NULL, NULL, 4, NULL, NULL, NULL, NULL, 1),
(5, 1, 4, NULL, NULL, NULL, NULL, NULL, NULL, 3, 1, 1, 2),
(6, 1, 5, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, 2),
(7, 1, 1, 2, 1, 2, 1, 1, 1, NULL, NULL, NULL, 0),
(8, 1, 7, NULL, NULL, NULL, NULL, NULL, NULL, 4, 4, 4, 1),
(9, 1, 8, 4, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, 1),
(10, 1, 9, NULL, NULL, NULL, NULL, NULL, NULL, 1, 1, 1, 2);
編輯2個
好傢伙,我發現這個解決方案,只返回預期:
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p1 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p2 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p3 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p4 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p5 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p6 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p7 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p8 AND id_action_set = 1
還有就是如何優化呢?
您的密鑰是如何定義的?你可以添加創建表SQL嗎? – Jeremy
你的表Action_set看起來很奇怪。爲什麼你有三行外鍵?沒有主要的 – nischayn22
@Jeremy:更新。 – Fabricio