MYSQL Союз и НРАВИТСЯ - PullRequest
       26

MYSQL Союз и НРАВИТСЯ

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

Привет, ребята. У меня проблемы с добавлением LIKE в мой UNION, похоже, он либо возвращает что-либо, либо возвращает только элементы, указанные в UNION, в зависимости от позиции моего лайка, например

Полный запрос

SELECT  fruits.key, 
        region, location, report_date, 
        inspection_type AS type, 
        customer AS customer_name, 
        customer_number, shipper, po

    FROM reports

JOIN (      ( SELECT `key` , `report_key`, `shipper`, `po`, `commodity`, `label`, `status`, `location` FROM `berries`       )
    UNION   ( SELECT `key` , `report_key`, `shipper`, `po`, `commodity`, `label`, `status`, `location` FROM `melons`        )
    UNION   ( SELECT `key` , `report_key`, `shipper`, `po`, `commodity`, `label`, `status`, `location` FROM `citrus`        )
    UNION   ( SELECT `key` , `report_key`, `shipper`, `po`, `commodity`, `label`, `status`, `location` FROM `table_grapes`  )
    UNION   ( SELECT `key` , `report_key`, `shipper`, `po`, `commodity`, `label`, `status`, `location` FROM `tree_fruit`    )
    UNION   ( SELECT `key` , `report_key`, `shipper`, `po`, `commodity`, `label`, `status`, `location` FROM `lot`           )
    ) fruits 

ON inspection_number = fruits.report_key

WHERE fruits.status = '0' OR fruits.status = '1'

ORDER BY report_date DESC

возвращает

key     region              location        report_date     type    customer_name   customer_number     shipper     po
17      Great White North   South Holywood  2012-10-21      citrus  Name            206-420-9564        Yao Ming    4215
16      Great White North   Boulder, CO     2012-10-21      citrus  Name            206-420-9564        Hanjin      33215
21      nw                                  1969-12-31      citrus  2               321                 sdfg        sdfgs
20      nw                  sdfgsdfg        1969-12-31      citrus  2               321                 sdfg        sdfg

Попытка сделать это, хотя

WHERE fruits.status = '0' OR fruits.status = '1' AND fruits.location LIKE '%Boulder%'

Возвращает точно такую ​​же строку вместо строки с Boulder вlocation.

С другой стороны, эта строка возвращает строку, но не остальную информацию из reports

`WHERE fruits.location LIKE '% Bolder%' AND fruits.status ='0' ИЛИ ​​fruits.status = '1'

key     region              location        report_date     type    customer_name   customer_number     shipper     po
16      Great White North   Boulder, CO     2012-10-21      citrus  Jd Daniel       206-420-9564        Hanjin      33215

Как правильно это сделать?Кажется, я получил половину одного или ничего другого?

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Ваша проблема в том, что AND связывается сильнее, чем OR, что означает, что ваше предложение where заканчивается на

WHERE fruits.status = '0' OR 
     (fruits.status = '1' AND fruits.location LIKE '%Boulder%')

То, что вы хотите сделать, это, вероятно,

WHERE (fruits.status = '0' OR fruits.status = '1') 
   AND fruits.location LIKE '%Boulder%'

, что означает, что вы 'Придется добавить скобки вокруг выражения OR.

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

Никогда не смешивайте ор-и-и-ов, не ставя вокруг них скобки. Это, вероятно, то, что вы хотите:

WHERE (fruits.status = '0' OR fruits.status = '1') AND fruits.location LIKE '%Boulder%'
0 голосов
/ 28 февраля 2012

Надеюсь, я понял, что вы имеете в виду.если это так, вам нужно сшить:

WHERE fruits.status = '0' OR (fruits.status = '1' AND fruits.location LIKE '%Boulder%')

или

WHERE (fruits.status = '0' OR fruits.status = '1') AND fruits.location LIKE '%Boulder%'

надеюсь, что поможет:)

...