[英]mysql query (join) and adding subqueries
我有這個查詢,它可以正確顯示結果。 我沒有使用join,但是它似乎仍然返回正確的值,那怎么可能?
SELECT connections.id,
connections.word_id,
connections.order_id,
connections.top,
connections.deleted,
(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(connections.modified)) AS modified_ago,
words_en.word,
(CASE WHEN words_en.user_id = 1 THEN "You" ELSE words_en.user_id END) AS created_by
FROM connections, words_en
WHERE connections.word_id = words_en.id AND connections.user_id = 1
IN (SELECT COUNT(*) connections WHERE /* Result of previous select connections.word_id */ AND connections.user_id != 1)
ORDER BY connections.order_id
是否足以做到這一點: connections.word_id = words_en.id
加入?
我還想對此添加子查詢。 那是什么語法?
子查詢應該計算conenctions.word_id
出現在連接表中的次數,其中connections.user_id != 1
ergo其他用戶使用了該單詞的次數。
users.name_surname
,該words_en.user_id
將使我獲得users.name_surname
作為words_en.user_id
。 要聯接表,我們可以使用,(逗號)或join關鍵字。 如果我們使用,(逗號),它將根據我們的條件給出確切的結果。 如果我們使用join關鍵字,我們可以使用多種連接類型,例如left join right join,以及更多其他類型。 這些所有聯接將給出不同的結果。
可以說,(逗號)聯接與JOIN相同,但與LEFT JOIN不同。
下面是編寫子查詢的示例
SELECT connections.id,
connections.word_id,
connections.order_id,
connections.top,
connections.deleted,
(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(connections.modified)) AS modified_ago,
words_en.word,
words_en.user_id
FROM connections, words_en
WHERE connections.word_id = words_en.id AND connections.user_id IN (select id from connections)
ORDER BY connections.order_id
select id from connections
是子查詢
對於您的第三點,請嘗試以下
SELECT users.name_surname
FROM users, words_en
WHERE users.user_id = words_en.user_id
ORDER BY users.user_id
進行加入操作:
SELECT connections.id,
connections.word_id,
connections.order_id,
connections.top,
connections.deleted,
(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(connections.modified)) AS modified_ago,
words_en.word,
words_en.user_id
FROM connections
LEFT JOIN words_en ON connections.word_id = words_en.id AND connections.user_id = 1
WHERE
words_en.id IS NOT NULL
ORDER BY connections.order_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.