3

たぶん私は愚かなことを見逃すかもしれませんが...
私はm対mの関係で3つのテーブルを持っています:

CREATE TABLE tbl_users (
  usr_id        INT NOT NULL AUTO_INCREMENT ,
  usr_name      VARCHAR( 64 ) NOT NULL DEFAULT '' ,
  usr_surname   VARCHAR( 64 ) NOT NULL DEFAULT '' ,
  usr_pwd       VARCHAR( 64 ) NOT NULL ,
  usr_level     INT( 1 ) NOT NULL DEFAULT 0,
  PRIMARY KEY ( usr_id )
) ENGINE = InnoDB;


CREATE TABLE tbl_houses (
  house_id      INT NOT NULL AUTO_INCREMENT ,
  city          VARCHAR( 100 ) DEFAULT '' ,
  address       VARCHAR( 100 ) DEFAULT '' ,
  PRIMARY KEY ( house_id )
) ENGINE = InnoDB;

CREATE TABLE tbl_users_houses (
  user_id       INT NOT NULL ,
  house_id      INT NOT NULL ,
  INDEX user_key (user_id),
  FOREIGN KEY (user_id) REFERENCES tbl_users(usr_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  INDEX house_key (house_id) ,
  FOREIGN KEY (house_id) REFERENCES tbl_houses(house_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE = InnoDB;

リンク テーブルには、次の 2 つのレコードがあります。

user_id  house_id
  1         1
  1         2

今、すべての家を選択しようとしています:

select * from tbl_houses AS H 
  left join tbl_users_houses AS UH on H.house_id = UH.house_id
where UH.user_id = 2;

すべての家ではなくデータを取得できないのはなぜですか?

4

4 に答える 4

2

あなたのWHERE句はそれを指定しています

UH.user_id = 2

に変更するとどうなりH.user_id = 2ますか?

これを与えるには (user_id = 2 のすべての家):

select * from tbl_houses AS H 
  left join tbl_users_houses AS UH on H.house_id = UH.house_id
where H.user_id = 2;

または、関係なくすべての家が必要で、tbl_User_houses に存在する user_id = 2 のデータが必要な場合は、次のようにします。

select * from tbl_houses AS H 
  left join tbl_users_houses AS UH on H.house_id = UH.house_id and UH.user_id = 2;
于 2013-10-28T14:46:50.840 に答える
1

ID 2 のユーザーがいないためです。

于 2013-10-28T14:47:00.660 に答える