簡體   English   中英

我正在嘗試從2個mysql表中選擇數據到1個查詢中

[英]I am trying to select data from 2 mysql tables into 1 query

我有2個mysql表,

第一個表保存有關文件的數據(包括文件夾ID)

第二張表保存有關文件夾的數據

我想為每個用戶選擇文件,並且我還需要包含文件夾名稱,該名稱保存在第二個表中。

所以我需要以某種方式加入這些表。

表1-文件

`file_id` int(20) NOT NULL AUTO_INCREMENT,    
`FILE_NAME` varchar(200) NOT NULL,
`FILE_SIZE` varchar(200) NOT NULL,
`FILE_TYPE` varchar(200) NOT NULL,
`file_added` datetime DEFAULT NULL,
`share_type` varchar(200) NOT NULL,
`folder_id` int(20) NOT NULL,
`u_id` int(11) NOT NULL,

表2-文件夾

`folder_id` int(20) NOT NULL AUTO_INCREMENT,
`folder_name` varchar(200) NOT NULL,
`u_id` int(11) NOT NULL,

所以我需要能夠選擇:file_name(table1),file_size(table1),folder_name(table2)

我已經嘗試了很多事情,例如這個敵人的例子:

SELECT files.file_name, files.file_size, folders.folder_name 
FROM files
  JOIN folders ON files.u_id = folders.u_id
WHERE 
  files.u_id = ?
  AND folders.u_id = ?
ORDER BY folders.folder_name, files.file_name

但這只是返回文件的多行,每個文件夾名末尾

我錯了多少?

兩個表之間的連接列通過folder_id而不是u_id (我認為這與用戶所有權有關)將它們u_id

查詢中的WHERE子句可能是不必要的,這是嘗試使用隱式聯接的產物。 現在,完全刪除WHERE子句並更正join ON條件。 當使用舊式隱式FROM (在FROM子句中用逗號分隔的表)時,使用WHERE條件將兩個表關聯起來,但這似乎不是您在這里所做的。

無論如何,顯式的JOIN是現代的首選語法。

重新添加您需要將結果限制為過濾集的所有WHERE子句。

SELECT
  files.file_name,
  files.file_size,
  folders.folder_name 
FROM
  files
  JOIN folders ON files.folder_id = folders.folder_id
ORDER BY
  folders.folder_name,
  files.file_name

由於它是一個非常直接的查詢。 我不會理會JOIN語法。 內部和外部接頭都在那兒。 但是在這里,文件始終有一個文件夾(我認為)。

SELECT 
    A.file_name, A.file_size, B.folder_name 
FROM 
    files A, folders B 
WHERE A.folder_id = B.folder_id

A和B是表別名

您應該使用folder_id字段聯接表。 試試這個變體:

SELECT files.file_name, files.file_size, folders.folder_name 
FROM files
  JOIN folders ON files.folder_id = folders.folder_id AND files.u_id = ? ORDER BY folders.folder_name, files.file_name
 SELECT files.file_name, files.file_size, folders.folder_name 
    FROM files 
    INNER JOIN folders ON files.u_id = folders.u_id AND files.FOLDER_ID = folders.Folder_ID 
    ORDER BY folders.folder_name, files.file_name
Select files.*, folders.folder_name from files join folders on folders.folder_id = files.folder_id where files.u_id = USERID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM