1

との間には多対多の関連がwordsありdefinitionsます。

words:
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
+-----------------+--------------+------+-----+---------+----------------+

definitions:
+-------------------+--------------+------+-----+---------+----------------+
| Field             | Type         | Null | Key | Default | Extra          |
+-------------------+--------------+------+-----+---------+----------------+
| id                | int(11)      | NO   | PRI | NULL    | auto_increment |
| language_id       | int(11)      | YES  | MUL | NULL    |                |
+-------------------+--------------+------+-----+---------+----------------+

definitions_words:
+---------------+---------+------+-----+---------+-------+
| Field         | Type    | Null | Key | Default | Extra |
+---------------+---------+------+-----+---------+-------+
| definition_id | int(11) | NO   | PRI | NULL    |       |
| word_id       | int(11) | NO   | PRI | NULL    |       |
+---------------+---------+------+-----+---------+-------+

で定義が1つだけのすべての単語レコードを取得したいと思いますlanguage_id = 1

4

2 に答える 2

2

これをSQLで表現する最も簡単な方法は、次を使用することだと思いますin

select *
from words
where id in (select word_id
             from word_definitions
             where language_id = 1
             having count(*) = 1
            )

ただし、inサブクエリを使用すると、MySQLで常に効率的に機能するとは限りません。exists次の句に置き換えることができます。

select *
from words w
where exists (select 1
              from word_definitions wd
              where language_id = 1
              having count(*) = 1 and wd.word_id = w.id
             )
于 2013-01-24T11:41:32.143 に答える
1
SELECT  a.ID, COUNT(*) totalRecordCount
FROM    words a
        INNER JOIN definition_words b
            ON a.ID = b.word_ID
        INNER JOIN definitions c
            ON b.definition_id = c.ID
        INNER JOIN
        (
            SELECT  id,
                    SUM(language = 1) totalCount
            FROM    definitions
            GROUP   BY id
        ) d ON c.ID = d.ID AND 
               d.TotalCount = 1
GROUP   BY a.ID
于 2013-01-24T11:37:33.763 に答える