MySQL Union Select с проблемой разных столбцов - PullRequest
0 голосов
/ 05 февраля 2020

Я искал эту проблему высоко и низко, и я был уверен, что мой запрос действителен. Тем не менее, я постоянно получаю ошибку. Пожалуйста, помогите!

У меня есть две таблицы. Один первый для жилой недвижимости. В ней 4 столбца, которых нет во второй таблице ... Я использовал NULL AS '...' для каждого из пропущенных столбцов.

SELECT `L_ListingID`, `LA1_AgentID`, `L_Class`, `L_Class_`, `L_Address`, `L_City`, `L_State`, `L_Zip`, `L_AskingPrice`, `L_InputDate`, `L_Status`, `LM_Int1_1`, `LM_Int4_12`, `LM_Char10_12`, `LM_Char10_13`, `LM_Char10_14`, `LM_Char10_15` 
FROM `properties_residential` 
WHERE 1 AND ( LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
UNION 
SELECT `L_ListingID`, `LA1_AgentID`, `L_Class`, `L_Class_`, `L_Address`, `L_City`, `L_State`, `L_Zip`, `L_AskingPrice`, `L_InputDate`, `L_Status`, NULL AS `LM_Int1_1`, NULL AS `LM_Int4_12`, NULL AS `LM_Char10_12`, NULL AS `LM_Char10_13`, NULL AS `LM_Char10_14`, NULL AS `LM_Char10_15` 
FROM `properties_commercial` 
WHERE 1 AND ( LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
ORDER BY `L_InputDate` 
DESC LIMIT 6

И ошибка ...

1054 - Неизвестный столбец 'LM_Char10_12' в 'где пункт'

Кто-нибудь, пожалуйста, укажите мне правильное направление. Я очень ценю любую помощь.

1 Ответ

1 голос
/ 05 февраля 2020

В своем запросе вы используете псевдоним столбца в предложении WHERE, что недопустимо в MYSQL.

Стандарт SQL запрещает ссылки на псевдонимы столбцов в предложении WHERE. Это ограничение наложено потому, что при оценке предложения WHERE значение столбца может еще не быть определено. Например, следующий запрос недопустим:

> SELECT id, COUNT(*) AS cnt FROM tbl_name   WHERE cnt > 0 GROUP BY id;

Выше взято из MYSQL документации: MySQL документов

Исправление в вашем запросе :

SELECT `L_ListingID`, `LA1_AgentID`, `L_Class`, `L_Class_`, `L_Address`, `L_City`, `L_State`, `L_Zip`, `L_AskingPrice`, `L_InputDate`, `L_Status`, `LM_Int1_1`, `LM_Int4_12`, `LM_Char10_12`, `LM_Char10_13`, `LM_Char10_14`, `LM_Char10_15` 
FROM `properties_residential` 
WHERE 1 AND ( LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
UNION 
SELECT `L_ListingID`
, `LA1_AgentID`
, `L_Class`
, `L_Class_`
, `L_Address`
, `L_City`
, `L_State`
, `L_Zip`
, `L_AskingPrice`
, `L_InputDate`
, `L_Status`
, NULL AS `LM_Int1_1`
, NULL AS `LM_Int4_12`
, NULL AS `LM_Char10_12`
, NULL AS `LM_Char10_13`
, NULL AS `LM_Char10_14`
, NULL AS `LM_Char10_15` 
FROM `properties_commercial` 
WHERE 1 AND 
( 
LCASE(TRIM(`L_Address`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_City`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_Area`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_State`)) LIKE '%kokomo, in' 
OR LCASE(TRIM(`L_Zip`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_12`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_13`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_14`)) LIKE '%kokomo, in' 
--OR LCASE(TRIM(`LM_Char10_15`)) LIKE '%kokomo, in' 
OR CONCAT ( L_City, ', ', L_State ) LIKE '%kokomo, in%' 
OR CONCAT ( L_City, ' ', L_State ) LIKE '%kokomo, in%' ) 
ORDER BY `L_InputDate` 
DESC LIMIT 6

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

...