mysql, объединяющий 2 таблицы и проверяющий 2 условия - PullRequest
1 голос
/ 22 января 2011

MySQL

table1:

+--------+------+
| listid | type |
+--------+------+
|    1   |  a   |
+--------+------+
|    2   |  a   |
+--------+------+
|    3   |  b   |
+--------+------+

table2:

+----+--------+------+
| id | listid | code |
+----+--------+------+
|  1 |    1   |  ax  |
+----+--------+------+
|  2 |    1   |  bx  |
+----+--------+------+
|  3 |    2   |  ax  |
+----+--------+------+
|  4 |    2   |  bx  |
+----+--------+------+
|  5 |    2   |  cx  |
+----+--------+------+
|  6 |    3   |  ax  |
+----+--------+------+
|  7 |    3   |  bx  |
+----+--------+------+

Задача

В одном запросе я хочу проверить, если:

1) в таблице table2 только «топор» и «bx» указаны как код

2) тип listid , который я получаю в 1) - "a" в таблице table1

PHP

$a = mysql_query("SELECT t1.listid FROM table1 AS t1, table2 AS t2......");
$b = mysql_fetch_assoc($a);

if($b['listid'])
{
    echo $b['listid'];
}
else
{
    echo 'nothing found';
}

выход

listid = 1

listid = 2 является ложным, потому что "cx" также включен в table2

listid = 3 является ложным, поскольку имеет тип "b" в table1

Надеюсь, это имеет смысл:)

1 Ответ

1 голос
/ 22 января 2011
SELECT  t1.listid
FROM    t1
WHERE   type = 'a'
        AND id NOT IN
        (
        SELECT  listid
        FROM    t2
        WHERE   code NOT IN ('ax', 'bx')
        )

Это также будет соответствовать записям из t1, которые не имеют соответствующих записей в t2 вообще.

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