2013-11-26 2 views
0

У нас есть эта таблица, которая действительно напуганна, и я пытаюсь получить описательный результат.
В этой таблице хранится тесно связанная, но разрозненная коллекция типов данных, а значимые столбцы «имена» хранятся в отдельной таблице. Думаю, будет легче показать, чем объяснить.MySQL: использовать значение из другой таблицы в качестве псевдонима столбца?

Упрощенные и реферат Пример:

CREATE TABLE IF NOT EXISTS `something_obscure` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
     `obscure_type_id` tinyint(2) NOT NULL, 
     `segment1` varchar(92) DEFAULT NULL, 
     `segment2` varchar(92) DEFAULT NULL, 
     `segment3` varchar(92) DEFAULT NULL, 
     `datetime_created` datetime DEFAULT NULL, 
     PRIMARY KEY (`id`) 
    ); 
    INSERT INTO `something_obscure` 
     (`id`, `obscure_type_id`, `segment1`, `segment2`, `segment3`, `datetime_created`) 
    VALUES 
     ('250', 1, '123', '456', '789', '2013-05-14 10:13:44'), 
     ('251', 2, 'abc', 'def', 'ghk', NULL), 
     ('252', 2, NULL, NULL, 'mnop', NULL); 


CREATE TABLE IF NOT EXISTS `obscure_type` (
     `id` tinyint(2) unsigned NOT NULL AUTO_INCREMENT, 
     `type` varchar(30) NOT NULL, 
     `description` varchar(92) DEFAULT NULL, 
     `segment1` varchar(92) DEFAULT NULL COMMENT 'a LABEL/NAME for the data found in Segment1 of the Obscure table', 
     `segment2` varchar(92) DEFAULT NULL, 
     `segment3` varchar(92) DEFAULT NULL, 
     `datetime_created` datetime DEFAULT NULL, 
     PRIMARY KEY (`id`) 
    ); 
    INSERT INTO `obscure_type` 
     (`id`, `type`, `description`, `segment1`, `segment2`, `segment3`) 
    VALUES 
     (1, 'native', 'a descriptive description', 'best', 'worst', 'other'), 
     (2, 'alien', 'another descriptive desc', 'in', 'out', 'stationary'); 


Изначально я ожидал поставил значащие имена столбцов в бизнес-логике (в PHP), но если бы я мог просто получить SQL для обработки этого до нашей программы даже видит этот результирующий набор, который будет awesome!

ЦЕЛЬ:
Просто, чтобы показать (я знаю, что это не будет реально работать), я что-то думать, вроде как:

SELECT 
    data.segment1 AS type.segment1, 
    data.segment2 AS type.segment2, 
    data.segment3 AS type.segment3 
FROM something_obscure AS data 
JOIN pobscure_type AS type 
ON data.obscure_type_id = type.id 
WHERE data.obscure_type_id = 2 

И возвращающие бы:

---------------------------- 
| in | out | stationary | 
---------------------------- 
| abc | def | ghk  | 
| NULL | NULL | mnop  | 
---------------------------- 

РЕЗЮМЕ:
Как можно использовать псевдонимы настройки для значения другой таблицы?
Мы не хотим указывать имя псевдонима, мы хотим, чтобы имя псевдонима было задано значением поля, на которое указывает ссылка. Это возможно?

+0

Если запрос для 'obscure_type_id = 1' псевдонима для' segment1' будет " лучше всего ", и если запрос для' obscure_type_id = 2', то псевдоним wo uld be "in" ... похоже, что он будет взрываться, хотя, если запрос когда-либо выполнялся для нескольких идентификаторов типа ... независимо от того, возможно ли это? – mOrloff

ответ

1

Вы пытались обернуть псевдонимы в backqoutes?

SELECT 
    data.segment1 AS `type.segment1`, 
    data.segment2 AS `type.segment2`, 
    data.segment3 AS `type.segment3` 
FROM something_obscure AS data 
JOIN obscure_type AS type 
ON data.obscure_type_id = type.id 
+0

Я думаю, что, возможно, я был немного неясен. Я добавлю комментарий к своему сообщению, чтобы уточнить. – mOrloff

0

Используйте одинарные кавычки вокруг псевдонимов

SELECT 
    data.segment1 AS 'segment1', 
    data.segment2 AS'segment2', 
    data.segment3 AS 'segment3' 
FROM something_obscure AS data 
JOIN obscure_type AS type 
ON data.obscure_type_id = type.id 

Working fiddle demo

Other demo with type.*

+0

Вы должны использовать '' back-ticks \ ', а не одинарные кавычки. – dar7yl

+1

@ dar7yl Я писал bacticks, но я видел другой ответ, отправленный с использованием backticks, поэтому я изменил свой ответ :) –

Смежные вопросы