-1

ユーザーテーブルがあります。認定表があります。

各ユーザーは複数の認定資格を持つことができます。Certifications には user_id 外部キーがあります。

  1. 1 つのクエリでユーザーとそのすべての資格を選択するにはどうすればよいですか?
  2. 認定資格を持つユーザーを選択するにはどうすればよいですか?

ユーザー テーブル:

CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `username` varchar(24) default NULL,
  `displayname` varchar(24) default NULL,
  `email` varchar(64) default NULL,
  `password` text,
  `signup_date` int(11) default NULL,
  `signup_ip` varchar(15) default NULL,
  `hash` text,
  `verified` tinyint(1) default '0',
  `last_login` int(11) default NULL,
  `logins` int(11) default NULL,
  `status` text,
  `recovery_hash` text,
  `recovery_initiated` int(11) default NULL,
  `last_updated` int(11) default NULL,
  `signup_method` text,
  `signup_question` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

認定表:

CREATE TABLE `certifications` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `user_id` int(11) unsigned NOT NULL,
  `number` varchar(128) default NULL,
  `board` varchar(128) default NULL,
  `company` varchar(128) default NULL,
  `website` varchar(128) default NULL,
  PRIMARY KEY  (`id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `certifications_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

読んでくれてありがとう。

4

2 に答える 2

3

結合を使用して、IDが1のユーザーのすべての証明書を取得します。

SELECT b.id as certification_id 
FROM users AS a
LEFT JOIN certifications AS b
ON a.id = b.user_id
WHERE a.id = 1;

内部結合を使用して、認定資格を持つすべてのユーザーを取得します。証明書を持たないすべてのユーザーはドロップアウトします。

SELECT a.id as users_with_certifications
FROM users as a
JOIN certifications AS b
ON a.id = b.user_id; 
于 2012-06-01T18:52:25.680 に答える
3

1 つのクエリでユーザーとそのすべての資格を選択するにはどうすればよいですか?

SELECT *
FROM certifivations C
LEFT JOIN users U
ON C.user_id = U.id
WHERE U.id=USERID

認定資格を持つユーザーを選択するにはどうすればよいですか?

SELECT *
FROM certifivations C
JOIN users U
ON C.user_id = U.id
GROUP BY U.id
于 2012-06-01T18:54:07.093 に答える