mysql查询中使用in和natural连接数量的混淆
我对MySQL查询感到困惑 假设我们有mysql查询中使用in和natural连接数量的混淆,mysql,sql,Mysql,Sql,我对MySQL查询感到困惑 假设我们有 CREATE TABLE person ( pid VARCHAR( 50 ) PRIMARY KEY, passwd CHAR( 32 ) NOT NULL, fname VARCHAR( 50 ), lname VARCHAR( 50 ), d_privacy INT NOT NULL -- change from part 1 spec, which said varchar ); CREATE TABL
CREATE TABLE person (
pid VARCHAR( 50 ) PRIMARY KEY,
passwd CHAR( 32 ) NOT NULL,
fname VARCHAR( 50 ),
lname VARCHAR( 50 ),
d_privacy INT NOT NULL -- change from part 1 spec, which said varchar
);
CREATE TABLE event (
eid INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
start_time TIME NOT NULL,
duration TIME NOT NULL,
description VARCHAR(50),
pid VARCHAR(50),
FOREIGN KEY (pid) REFERENCES person(pid)
);
CREATE TABLE invited (
pid VARCHAR(50) NOT NULL,
eid INT NOT NULL,
response INT,
visibility INT,
PRIMARY KEY (pid, eid),
FOREIGN KEY (pid) REFERENCES person(pid),
FOREIGN KEY (eid) REFERENCES event(eid)
);
CREATE TABLE friend_of (
sharer VARCHAR(50) NOT NULL,
viewer VARCHAR(50) NOT NULL,
level INT,
PRIMARY KEY (sharer, viewer),
FOREIGN KEY (sharer) REFERENCES person(pid),
FOREIGN KEY (viewer) REFERENCES person(pid)
);
例如,假设我是一名观众='AA'
并希望查看查看者的所有共享者的日程安排(eid
和description
)
我尝试了in和natural连接数量,但代码看起来很难看
select *
from invited natural join person
where person.pid in
(
select pid
from invited
where pid in(
SELECT sharer
from friend_of
natural join invited
where friend_of.viewer = 'AA'
and friend_of.sharer = invited.pid
))
此代码尚未完成。我必须自然地参加活动和活动
把描述放在数量上。但是我被困在这里了
如果您有更好的方法编写此功能,请。
NATURAL JOIN
在存在同名列的地方连接表。因此,例如,可以自然地将invested
加入person
或event
,因为pid
和eid
列分别存在于表中
但是请注意,通常最好避免自然连接
,而是使用或上的显式命名要连接的列,因为这样可以避免意外连接到碰巧命名相似的不相关列(特别是在将来架构发生更改时)
当将
的friend\u加入到
邀请的时,没有任何类似的命名列,因此自然加入
将有效地执行交叉加入。因此,我们可以采取如下措施:
SELECT *
FROM person
JOIN invited USING (pid)
JOIN event USING (pid, eid)
JOIN friend_of ON friend_of.sharer = invited.pid
WHERE friend_of.viewer = 'AA'
你的问题是什么?不应在中使用
,而应与其他表联接。事件的PID是PID的创建者。这给了我一个与其他表联接的问题。另一个PID是邀请参加派对的人Hey eggtal,您的代码似乎正确,但当我用此代码尝试时,它返回空值,我用手检查,它应该返回一些值。strange@Kingkong当前位置如果不查看您的数据,就无法说出发生了什么事。也许在网上发布一个样本?