2015-09-18 6 views
1

У меня в моей базе данных есть «пользователи», к сожалению, в ней много беспорядков, и я пытаюсь переместить ее на новую. Но просто точные вещи, которые не копируются/не вставляются целиком.MySQL SELECT query WHERE «something is TRUE»

Вот пример того, как дб выглядит следующим образом:

-------*/*------------*/*------------*/*------------*/*------------*/*------------ 
     id  level   name   kind   status   parentId 
    -------*/*------------*/*------------*/*------------*/*----------*/*------------ 
    EMD123F |  2  | OrgName1 |  Org  |   | rootID 
    --------------------------------------------------------------------------------- 
    DHAD781 |  3  | UserName1 | Person | active | EMD123F 
    --------------------------------------------------------------------------------- 
    7AJIZU7 |  3  | UserName2 | Person | active | EMD123F 
    --------------------------------------------------------------------------------- 
    DME123F |  2  | OrgName2 |  Org  |   | rootID 
    --------------------------------------------------------------------------------- 
    TT5451AL|  3  | UserName3 | Person | active | DME123F 
    --------------------------------------------------------------------------------- 
    RRMI7481|  2  | OrgName3 |  Org  |   | rootID 
    --------------------------------------------------------------------------------- 
    PPUNSAD9|  2  | OrgName4 |  Org  |   | rootID 
    --------------------------------------------------------------------------------- 
    GJASDNZB|  3  | UserName4 | Person | inactive | PPUNSAD9 
    --------------------------------------------------------------------------------- 
    KJNSCZM7|  2  | OrgName5 |  Org  |   | rootID 
    --------------------------------------------------------------------------------- 
    1UZGOPAS|  3  | UserName5 | Person | deleted | KJNSCZM7 
    --------------------------------------------------------------------------------- 

То, что вы здесь видите, что некоторые «организация», которые имеют 0 пользователей, так это Absolutley бесполезно, есть некоторые организации, которые имеют пользователь, но они не являются активный (неактивный, удаленный ...).

Мой вопрос заключается в том, как написать инструкцию select, чтобы получить ВСЕ ОРГАНИЗАЦИЮ, где внутри есть 1 активный человек.

RealData является немного более сложным, но я пытаюсь что-то вроде этого:

UPDATE users set org_status=1 WHERE (select count(STATUS) FROM users WHERE users.MEMBERKIND="Person" AND users.STATUS="Active" AND users.ROOTORGANIZATIONUSERID= users.ROOTORGANIZATIONIDCORRECTED)>0 AND MEMBERKIND = "Organization" AND LEVEL=2 

я создаю новую строку «org_status» и установите его в NULL, и после этого я пытаюсь обновить его

+0

Просьба предоставить запрос/запросы, которые вы пробовали до сих пор. Но subselect должен работать, я думаю (untested): 'SELECT * FROM orgaTable WHERE (выберите count (*) от пользователей orgaTable AS WHERE users.parentId = orgaTable.id)> 0;' –

+0

Возможный дубликат [Как создать MySQL иерархический рекурсивный запрос] (http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query) – vhu

ответ

2
select t1.* 
from your_table t1 
join your_table t2 on t2.parentId = t1.id 
where t2.status = 'active' 
+0

Эй, извините, если я запутаю вас, но нет двух таблиц , это всего лишь один атм – Andurit

+0

Да. Я присоединяюсь к той же таблице ('your_table') дважды в запросе с разными именами псевдонимов' t1' и 't2' –

+0

Эй, спасибо за точку, я пробую это несколько раз, к сожалению, я не смог получить успешный результат. Я получаю всего 24 строки, остальные несколько тысяч теряются. Логично это выглядит хорошо, поэтому я не знаю, где aproblem – Andurit

1

Предполагая, что вы заботитесь только о лицах, принадлежащих к организации без промежуточных уровней, вы можете получить организации, используя exists:

select o.* 
from users o 
where exists (select 1 
       from users p 
       where p.parentid = o.id and 
        o.kind = 'Org' and 
        p.kind = 'Person' and 
        p.status = 'active' 
      ); 
+0

Эй, извините, если я вас смутил, но нет двух столов, это всего лишь один атм – Andurit

+0

@ Andurit. , , Этот запрос относится только к одной таблице. –