Ich habe die folgende Tabelle mit den folgenden Daten:
id | Text | Sprache |
---|---|---|
1 | Deutscher Text | Deutsch |
2 | Englischer Text | Englisch |
Ich m?chte Ergebnisse im folgenden Format erhalten:
german="deutscher text" english="english text"
Das sollte nicht bedeuten:
text="deutscher text" text="english text"
Schlüssel-/Spaltennametext
應(yīng)該是來自language
Daten
Ich habe die folgende Abfrage versucht, aber sie funktioniert nicht:
SELECT text as (SELECT language FROM `table` where id = 1) FROM `table` where id = 1;
(SELECT language FROM
table where id = 1)
gibt ?deutsch“ zurück, daher sollte die Abfrage wie folgt lauten:
?W?hlen Sie deutschen Text aus table
, wobei id = 1;“ aber das funktioniert nicht.
Gibt es eine M?glichkeit, dies in einer Abfrage zu tun?
Cheers, Thomas
您必須稍微更改一下表架構(gòu);添加了對要使用的語言進(jìn)行分組的引用
CREATE TABLE IF NOT EXISTS `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ref` int(11) DEFAULT 0, `text` varchar(50) DEFAULT NULL, `language` varchar(50) DEFAULT NULL, KEY `Index 1` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;
然后是SQL
SELECT T.text AS english, T2.text AS german FROM test T INNER JOIN test T2 ON T.ref = T2.ref AND T2.`language` = 'german' WHERE T.ref = 1 AND T.language = 'english'
虛擬數(shù)據(jù)
INSERT INTO `test` (`id`, `ref`, `text`, `language`) VALUES (1, 1, 'deutscher text', 'german'), (2, 1, 'english text', 'english');
您可以使用的一個選項是 PREPARED STATMENT
:
SET @sql := NULL; SELECT GROUP_CONCAT( CONCAT('MAX(CASE WHEN language="',language,'" THEN text END) AS "',language,'"')) INTO @sql FROM mytable; SELECT CONCAT('SELECT ',@sql,' FROM mytable;') INTO @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
第一步是動態(tài)分配 @sql
變量所需的列。然后,將先前分配的 @sql
變量與最終 SELECT
查詢的其余部分連接起來,然后將其重新分配給 @sql
變量。查詢將以:
SELECT MAX(CASE WHEN language="german" THEN text END) AS "german", MAX(CASE WHEN language="english" THEN text END) AS "english" FROM mytable;
最后,我們準(zhǔn)備、執(zhí)行然后取消分配在 @sql
變量中分配的語句,您將得到預(yù)期的結(jié)果。