我有两张桌子:

CREATE TABLE folders (
ID BIGINT PRIMARY KEY AUTO_INCREMENT,
uid BIGINT NOT NULL,
driveid BIGINT NOT NULL,
foldername VARCHAR(64) NOT NULL,
icon_url varchar(260),
time_created timestamp NOT NULL default '0000-00-00 00:00:00',
time_updated timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
time_expires timestamp NOT NULL default '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE drives (
ID BIGINT PRIMARY KEY AUTO_INCREMENT,
uid BIGINT NOT NULL,
drivename VARCHAR(100) NOT NULL,
icon_url varchar(260),
time_created timestamp NOT NULL default '0000-00-00 00:00:00',
time_updated timestamp NOT NULL default '0000-00-00 00:00:00' on update CURRENT_TIMESTAMP,
time_expires timestamp NOT NULL default '0000-00-00 00:00:00'

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

我要选择驱动器和所有文件夹,其中:
在驱动器表中,其中uid = UID NUMBER
在文件夹中,其中dbid = ID来自同时具有UID = given UID number的驱动器
我只需要一个查询,然后在一个响应中得到整个结果。有可能吗?
如果是这样的话,请建议,我不想粘贴我尝试过的内容,因为它们很愚蠢,我尝试过内部连接、左连接、混合查询,但我没有接近。

最佳答案

最终,这在两个条件下等于aLEFT JOIN。如果uiddrives中有记录,但没有关联的文件夹,则驱动器将与文件夹列中的NULL一起返回。driveid必须与drives.ID匹配,uid必须相同;这两者都将在ON子句中指定。

SELECT
  drives.ID AS driveid,
  drives.drivename,
  drives.uid,
  folders.ID AS folderid,
  folders.foldername,
  folders.icon_url,
  drives.time_created AS drive_time_created,
  drives.time_updated AS drive_time_updated,
  drives.time_expires AS drive_time_expires,
  folders.time_created AS folders_time_created,
  folders.time_updated AS folders_time_updated,
  folders.time_expires AS folders_time_expires
FROM
  drives
  LEFT JOIN folders
    ON drives.ID = folders.driveid
    AND drives.uid = folders.uid
WHERE
  drives.uid = [the-specified-uid]

关于mysql - 单查询中的MySQL双查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27761647/

10-11 03:32
查看更多