簡體   English   中英

通過內部聯接選擇

[英]Select with inner join

我需要從兩個表中選擇一些數據,請幫助我使用內部聯接進行此選擇。 選擇2中的玩家一定不能進入選擇1 ...首先選擇:

$rs = "SELECT * 
        FROM `player` 
        WHERE `status`=1 AND `credit`>=1 AND `username` NOT LIKE '$user' 
        ORDER BY ls ASC,credit DESC 
        LIMIT 0 ,10;

第二:該玩家必須從選擇結果中刪除1

$rs2 = "SELECT * 
        FROM `ip_log` 
        WHERE `playerid`='$ui' AND `win`='1' AND `date`='$date' ";`

您可以為此使用LEFT JOIN

這將顯示未選擇1的每個人的日志消息。

SELECT l.*
FROM ip_log AS l
LEFT JOIN 
    (SELECT username
     FROM player
     WHERE status = 1 AND credit >= 1 AND username NOT LIKE '$user'
     ORDER BY ls ASC, credit DESC 
     LIMIT 10) AS p
ON l.player = p.username
WHERE win = 1 and date = '$date'
AND p.username IS NULL

這顯示了前10個玩家數據,選擇2中帶有日志消息的數據除外

SELECT p.*
FROM player AS p
LEFT JOIN ip_log AS l ON l.player = p.username AND l.win = 1 AND l.date = '$date'
WHERE p.status = 1 AND p.credit >= 1 AND p.username NOT LIKE '$user'
AND l.player IS NULL
ORDER BY p.ls ASC, p.credit DESC
LIMIT 10

在這兩種情況下,使用IS NULL測試第二個表中的列都會使其僅返回第一個表中與第二個表中不匹配的行。 看到

僅當值不存在時才返回行

您可以使用LEFT JOIN完成

SELECT player.*,ip_log.* FROM `player` LEFT JOIN `ip_log` ON player.id!=ip_log.playerid GROUP BY player.id

暫無
暫無

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

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