0

私は2つのテーブルを持っています。1つは次のとおりです。

+--------------------------+-------------+------+-----+---------+
| Field                    | Type        | Null | Key | Default |  
+--------------------------+-------------+---------+-----+------+ 
| facility_id              | int(10)     | NO   | PRI | NULL    |  
| facility_name            | varchar(30) |      |     | NULL    |                 
| facility_model           | varchar(25) |      |     | NULL    |                 
+--------------------------+-------------+------+-----+---------+ 

もう一つは:

+--------------------------+-------------+------+-----+---------+
| Field                    | Type        | Null | Key | Default | 
+--------------------------+-------------+---------+-----+------+ 
| facility_id              | int(10)     | NO   | PRI | NULL    | 
| facility_serial_number   | varchar(30) |      |     | NULL    |                 
+--------------------------+-------------+------+-----+---------+

さまざまな施設が同じ施設のシリアル番号を持つ可能性があります (これを見つけて修正する必要があります)。施設のシリアル番号が複数回出現する施設の情報をすべて取得したい。

group by を使用しようとしましたが、次のものがありました。

select f1.facility_id, f1.facility_name, f1.facility_model, f2.facility_serial_number
from f1, f2 on f1.facility_id = f2.facility_id
group by f2.facility_serial_number
having count (facility_serial_number) > 2

違います。他の方法も試しましたが、成功しませんでした。正しいクエリ構文とは何ですか?

4

3 に答える 3

0

あなたの意図があなたのSQLから何であるかは明らかに明確ではありませんが、正しい構文は次のようになります

select  f1.facility_id, 
        f1.facility_name, 
        f1.facility_model, 
        f2.facility_serial_number 
from    f1 INNER JOIN
        f2  on  f1.facility_id = f2.facility_id 
group by    f1.facility_id, 
            f1.facility_name, 
            f1.facility_model, 
            f2.facility_serial_number
having count (facility_serial_number) > 2

また

select  f2.facility_serial_number 
from    f1 INNER JOIN
        f2  on  f1.facility_id = f2.facility_id 
group by    f2.facility_serial_number
having count (facility_serial_number) > 2

しかし、私があなたを正しく理解しているなら、あなたは次のようなことを試してみたいかもしれません

select  f1.facility_id, 
        f1.facility_name, 
        f1.facility_model, 
        f2.facility_serial_number 
from    f1 INNER JOIN
        f2  on  f1.facility_id = f2.facility_id 
WHERE   f2.facility_serial_number IN (
                                        select  f2.facility_serial_number 
                                        from    f1 INNER JOIN
                                                f2  on  f1.facility_id = f2.facility_id 
                                        group by    f2.facility_serial_number
                                        having count (facility_serial_number) > 2
                                    )
于 2012-09-17T06:01:12.057 に答える
0

次の参照を試してください

SELECT f1.facility_id, f1.facility_name, f1.facility_model, f2.facility_serial_number 
FROM f1 LEFT JOIN f2 on f1.facility_id = f2.facility_id 
GROUP BY f2.facility_serial_number 
HAVING count (f2.facility_serial_number) > 2
于 2012-09-17T06:01:40.350 に答える
0
select * form f1 from where facility_id in(
select facility_id where f2 group by facility_id
 having count(facility_serial_number) > 2))
于 2012-09-17T06:12:06.887 に答える