0

希望有人能帮助我建立这个查询。我需要从数据库中获取属于某个特定用户的值。这些是我需要得到的列。

01. city_name // From city table
02. district_name // From district table
03. category_name // From category table
04. subscription_period // From tutors table
05. date_registered // From tutors table

我已经分别得到了值tutor_id、city_id和category_id1, 53, 5

我的地址表有city_id列,City表有district_id列,类别表有category_id列,导师表有tutor_idaddress_id

我尝试过这样的事情,但这不起作用。

SELECT city_name, district_name, category_name, subscription_period AS sp, date_registered AS date
FROM tutors AS t
INNER JOIN district AS d 
INNER JOIN city ON city.district_id = d.district_id
INNER JOIN address ON address.city_id = 50
INNER JOIN category
WHERE t.tutor_id = 1 AND category.category_id= 5

我的预期结果应该有 1 行作为输出,但是这个查询给了我更多的行作为输出

我的 SQL 表

CREATE TABLE tutors (
tutor_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
address_id SMALLINT NOT NULL,
tutor_name VARCHAR(80) NOT NULL,
subscription_period SMALLINT NOT NULL,
date_registered TIMESTAMP  NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (tutor_id)
); 

CREATE TABLE address (
address_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
address VARCHAR(40) NOT NULL, 
city_id SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (address_id)
);

CREATE TABLE district(
district_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
district_name VARCHAR(30) NOT NULL, 
PRIMARY KEY (district_id)
);

CREATE TABLE city(
city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
city_name VARCHAR(30) NOT NULL, 
district_id SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (city_id)
);

CREATE TABLE category (
category_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
category_name VARCHAR(60) NOT NULL, 
PRIMARY KEY (category_id)
);

CREATE TABLE tutor_category(
tutor_id SMALLINT UNSIGNED NOT NULL,
category_id SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (tutor_id)
);
4

1 回答 1

2

尝试这样的事情:

SELECT c.city_name, 
       d.district_name, 
       c.category_name, 
       t.subscription_period AS sp, 
       t.date_registered AS date
FROM tutors t
   INNER JOIN address a ON t.address_id = a.address_id 
   INNER JOIN city c ON c.city_id  = a.city_id 
   INNER JOIN district d ON c.district_id = d.district_id 
   INNER JOIN tutor_category tc on t.tutor_id = tc.tutor_id 
   INNER JOIN category cat on tc.category_id = cat.category_id 
WHERE t.tutor_id = 1 AND cat.category_id= 5 AND c.city_id = 50

你需要JOIN在你的桌子上确保你只收到想要的结果。

如果您收到相同的重复行,则您可能做错了什么或您提供的定义不正确(看起来确实如此)。GROUP BY您可以通过在查询中添加或来“解决”问题,DISTINCT但这不是最好的方法。

于 2013-01-28T14:55:20.753 回答