开发者

MySQL WHERE syntax lack of knowledge

This works:

SELECT 
s.content_id, s.cover, s.orig_price, s.sale_price, s.exp_date, s.d开发者_JAVA百科istr_id, 
c.title 

    FROM 
        s, 
        c WHERE c.id = s.content_id;

This doesn't:

SELECT 
s.content_id, s.cover, s.orig_price, s.sale_price, s.exp_date, s.distr_id, 
c.title,
j.featured

    FROM 
        s, 
        c WHERE c.id = s.content_id,
        j WHERE j.contentid = s.content_id;

What am I doing wrong? It should be something dead simple, but I just can't see it. Been searching for an answer for a two-three hours on and off.


  FROM s,c,j WHERE c.id = s.content_id AND j.contentid = s.content_id;


Your implicit joins are out of order. All tables must be in the FROM clause, comma-separated. The join relationships are all specified in one WHERE clause.

SELECT 
  s.content_id, s.cover, s.orig_price, s.sale_price, s.exp_date, s.distr_id, 
  c.title,
  j.featured
FROM 
    s, c, j
WHERE 
  c.id = s.content_id,
  AND j.contentid = s.content_id;

But it would be better to use explicit JOINs instead. This is the preferred syntax for modern code.

SELECT 
  s.content_id, s.cover, s.orig_price, s.sale_price, s.exp_date, s.distr_id, 
  c.title,
  j.featured
FROM 
  s JOIN c ON c.id = s.content_id
  JOIN j ON j.contentid = s.content_id;


You are trying to do an implicit join, which looks like this

SELECT 
s.content_id, s.cover, s.orig_price, s.sale_price, s.exp_date, s.distr_id, 
c.title,
j.featured

FROM s, c, j
WHERE c.id = s.content_id,
AND j.contentid = s.content_id;

You are confusing your syntax with an explicit join, this is the same thing:

SELECT 
s.content_id, s.cover, s.orig_price, s.sale_price, s.exp_date, s.distr_id, 
c.title,
j.featured
FROM s
INNER JOIN c ON c.id = s.content_id
INNER JOIN j ON j.contentid = s.content_id;


The issue is the multiple WHERE clauses. Try changing the end to:

FROM
    s, c, j
WHERE
    c.id = s.content_id AND j.contentid = s.content_id;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜