Mysql подзапросы? - PullRequest
       14

Mysql подзапросы?

0 голосов
/ 21 февраля 2012

У меня есть таблица отчета, которая выглядит примерно так:

reports
inspection_type | inspection_number
berries         | 111 
citrus          | 222
grapes          | 333

inspection_type, в моем случае это имя другой таблицы, которую я бы хотел SELECT *, откуда inspection_number равно report_key на этой связанной таблице.

{fruit}
row      | report_key | etc....
value    | 111        | value
value    | 222        | value

Проблема в том, что я не знаю, как запросить инспекционный тип, чтобы получить имя таблицы для запроса значения.Имеет ли это какой-то смысл?

Я пробовал это здесь, но даже я знаю, что это явно неправильно:

SELECT inpection_type, inspection_number
FROM reports rpt
ON rpt.inspection_number = report_key
(SELECT * FROM inspection_type WHERE status < '2')
WHERE rpt.status < '2'
ORDER BY rpt.inspection_number DESC

Может ли гуру SQL сказать мне лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Вы действительно не можете делать то, к чему стремитесь, только в SQL, вам нужно либо возиться на другом языке, либо (и это предпочтительное решение) реструктурировать базу данных, т.е. (извините за метакод )

// Comes in where your existing `reports` table is
inspections (
    inspection_id INT UNSIGNED NOT NULL AI,
    inspection_type_id INT UNSIGNED NOT NULL (links to inspection_types.inspection_type_id)
    .... other rows ....
)

// New table to normalise the inspection types
inspection_types (
    inspection_type_id INT UNSIGNED NOT NULL AI,
    type_name VARCHAR NOT NULL
    .... other rows ....
)

// Normalised table to replace each {fruit} table
inspection_data (
    inspection_data_id INT UNSIGNED NOT NULL AI,
    inspection_id INT UNSIGNED NOT NULL (links to inspections.inspection_id)
    .... other rows ....
)

Тогда ваш запрос будет просто

SELECT * 
FROM inspections

INNER JOIN inspection_types
ON inspection_types.inspection_type_id = inspections.inspection_type_id

INNER JOIN inspection_data
ON inspection_data.inspection_id = inspections.inspection_id

Краткий обзор, приведенный выше, довольно расплывчатый, потому что ваши существующие данные таблицы на самом деле не указаны, но общий принцип обоснован. Миграция данных из существующей структуры даже не займет много времени, но когда это будет сделано, это даст вам гораздо более четкие запросы и позволит вам на самом деле легче получать данные, которые вы запрашиваете

1 голос
/ 21 февраля 2012

Поскольку невозможно иметь переменную для имени таблицы непосредственно в TSQL, вам придется динамически создавать TSQL.

Имена таблиц переменных в хранимых процедурах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...