在where子句中选择MYSQL子选项

在where子句中选择MYSQL子选项,mysql,database,subquery,Mysql,Database,Subquery,我在这个简单的代码和平上打破了我的头脑,它不想工作,我想不出任何其他解决方案 你能帮我把它弄好吗 SELECT chart FROM chart WHERE (select count(user_id) FROM users join charts ON user_id=charts.UID and charts.chart=chart WHERE INET_NTOA(user_ip)='127.0.0.1')=0; 有3个表涉及以下列: chart( chart int(5) ); cha

我在这个简单的代码和平上打破了我的头脑,它不想工作,我想不出任何其他解决方案

你能帮我把它弄好吗

SELECT chart FROM chart WHERE (select count(user_id) FROM users join charts ON
user_id=charts.UID and charts.chart=chart WHERE INET_NTOA(user_ip)='127.0.0.1')=0;
有3个表涉及以下列:

chart(
chart int(5)
);

charts(
UID int(11),
chart int(5)
);

`users` (
`user_id` int(11),
`user_ip` int(10)
);
关键是,第一次选择的“图表”列应该传递给charts.chart=chart的子查询,但子查询最终会与自身进行比较,即chart=chart—始终为true

我知道它不会像那样工作。。。但我真的想不出其他办法。我想做的事有什么办法吗

编辑1: 基本上,我需要一个反向选择:

  select chart.chart from chart join charts on chart.chart=charts.chart join users
  on user_id=charts.UID and INET_NTOA(user_ip)='127.0.0.1';
此查询返回用户使用给定ip标记的图表,例如:1、4、5、9。 但我需要选择那些没有标记的,即:2,3,6,7,8,10等等

编辑2:
我现在正在寻找某种负连接。我想这可以,但我不知道如何使用它。同时做一些研究…

你试过使用别名吗

从图表a中选择a.chart,其中选择countuser\u id from users join charts on user_id=charts.UID和charts.chart=a.chart,其中INET_NTOAuser_ip='127.0.0.1'=0


我不知道它是否能在MYSQL中工作,但我认为它能在MSSQL和Oracle中工作。

我想这是一个命名问题。。。尝试这样做:

SELECT c.chart FROM chart c
WHERE (
    SELECT COUNT(u.user_id) FROM users u
    INNER JOIN charts ch
     ON u.user_id = ch.UID 
     AND ch.chart = c.chart
    WHERE INET_NTOA(user_ip)='127.0.0.1'
       ) = 0;
尝试:

请注意,与其使用INET\u NTOAuser\u ip='127.0.0.1',不如使用


user_ip=2130706433,这是等效的,但索引友好。

您可以使用where select子句进行筛选:

SELECT TS.*, T.* 
FROM tbl_teams as T
LEFT JOIN tbl_teamstats TS 
    ON TS.tbl_teams_id = T.id
WHERE 
TS.id = (
        SELECT TS.id FROM tbl_teamstats TS 
        WHERE TS.tbl_teams_id = T.id
        ORDER BY TS.id DESC
        LIMIT 1
    ) 

我试过化名,但上面写着未知列。。。基本上,它在选择任何内容之前检查where子句,所以它看不到它。是的,我也想到了,但它说:错误1054 42S22:“on子句”中的未知列“c.chart”,所以它不会这样工作…:所以有什么想法吗?我在这一点上是无知的…哇,我永远不会想到它,我也不知道它是做什么的_localhost!但它起作用了!:谢谢不过我使用的是INET_NTOA,因为127.0.0.1的istead应该有“$\u server['remote_addr']”。它只是括号中子查询的别名。如果它不仅是本地主机ip,而且对于查询仍然是常量,请使用user\u ip=INET\u ATON$server['remote\u addr']条件。
SELECT TS.*, T.* 
FROM tbl_teams as T
LEFT JOIN tbl_teamstats TS 
    ON TS.tbl_teams_id = T.id
WHERE 
TS.id = (
        SELECT TS.id FROM tbl_teamstats TS 
        WHERE TS.tbl_teams_id = T.id
        ORDER BY TS.id DESC
        LIMIT 1
    )