簡體   English   中英

Select 來自表 1,表 2 上的外鍵 = x,其中表 2 外鍵 = 表 3 上的 Y

[英]Select from table 1 with foreign_key = x on table 2 where table 2 foreign key = Y on table 3

不確定標題是否有意義,但這里有一個更好的描述:我有一個輪班表,其中有一個輪班工人的 id 和一個輪班工人為之做某事的客戶的 id,並且客戶表有一個用戶id 與用戶表中的關聯記錄。

我想 select 所有班次都有一個客戶 ID,其中客戶記錄上的關聯用戶 ID 是 X。

Shifts Table
shift_id
shiftworker_id
client_id
...

Clients Table
client_id
user_id
...

Users Table
user_id
...

所以,我想要所有記錄(來自班次),其中班次的 client_id 屬於特定用戶。

用戶有很多客戶,客戶有很多與之相關的班次。 我想我追求的是這樣的加入:

select * from shifts join shifts.client_id on clients.id and where clients.user_id = X

我正在嘗試在 Laravel 中執行此操作,例如:

DB::table('shifts')->join('clients', 'client_id', '=', ...)->join('users', 'client_id', '=', X);

盡管對 SQL 的任何幫助表示贊賞,但我可以從那里找出 Laravel 查詢。

謝謝

最簡單的方法是創建“具有多個直通關系”並使用“用戶 ID”查詢用戶 model,而不是查詢班次。

class User extends Model
{
    public function shifts()
    {
        return $this->hasManyThrough(Shift::class, Client::class);
    }
}
class ShiftController extends Controller
{
    public function index()
    {
         return User::where('id', 1)->with('shifts')->first()->shifts;
    }
}

如果有效,controller 代碼將返回班次表中的記錄,不帶任何關系數據或額外字段。 如果您需要添加一些額外的字段,此方法可能不是最好的方法。 在這種情況下,請提供有關所需 output 數據的更多詳細信息。

評論后更新

您不需要使用任何 eloquent 關系 function 來獲取每個客戶的班次數據,因為 client_id 已經在班次表上。 所有你需要的是:

Shift::where('client_id', $client_id)->get();

MySQL - 更新<values> ) 在哪里</values>集(n<table></table><div id="text_translate"><p> 只是為了讓大象離開房間,因為有很多類似的問題。 我瀏覽了其他名稱相似的帖子,但沒有找到我要找的東西。 話雖如此,我可能只是沒有看到如何將他們的問題實施到我的具體實施中<br><br>我正在嘗試將表中的多行更新為所有 [可能] 不同的值,但我不知道在使用外鍵定位時我將更新多少行。 但是,由於數據庫限制,可以安全地假設我有正確數量的輸入。 (例如 3 行 3 個值,或 5 行 5 個值)並且即使假設不安全,我也不介意拋出錯誤,因為如果確實發生了錯誤,這將確保數據完整性......<br><br> 將哪些值分配給哪些行並不重要。<br><br> 這是我嘗試過的一些示例。</p><pre class="lang-sql prettyprint-override"> UPDATE table1 SET table1.column1 IN (17, 37, 62) WHERE table1.foreign_key = 877;</pre><p> 之后我發現你不能這樣使用 IN ......然后我嘗試了:</p><pre class="lang-sql prettyprint-override"> UPDATE table1 SET table1.column1 = (17, 37, 62) WHERE table1.primary_key IN (SELECT primary_key FROM table1 WHERE foreign_key = 877);</pre><p> 但是,“您不能在 FROM 子句中指定目標表 'table1' 進行更新”<br><br> 對於 SELECT 然后在(n_rows + 1 個查詢)之后進行更新(如下所示),這將是相當微不足道的,所以我假設可以在一個查詢中完成。</p><pre class="lang-sql prettyprint-override"> SELECT primary_key from table1 where foreign_key =?;,[877]</pre><p> 然后映射值和主鍵(我使用的是nodejs后端)</p><pre class="lang-sql prettyprint-override"> UPDATE table1 set column1 =? where primary_key =?;,[value1,primary_key1]</pre><p> 困難的部分似乎是</p><ol><li>如何將 map 多個值添加到多行。</li><li> 如何在運行時獲取每一行的唯一 ID。<br></li></ol><p> 我不介意是否必須使用存儲過程,我只是真的不想向數據庫發送 n+1 個查詢。</p></div>.`外鍵`<table> </table>

[英]MySQL - UPDATE <table> SET (n<values>) WHERE <table>.`foreign_key`

暫無
暫無

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

相關問題 創建SQL表,foreign_key混亂 MySQL - 更新<values> ) 在哪里</values>集(n<table></table><div id="text_translate"><p> 只是為了讓大象離開房間,因為有很多類似的問題。 我瀏覽了其他名稱相似的帖子,但沒有找到我要找的東西。 話雖如此,我可能只是沒有看到如何將他們的問題實施到我的具體實施中<br><br>我正在嘗試將表中的多行更新為所有 [可能] 不同的值,但我不知道在使用外鍵定位時我將更新多少行。 但是,由於數據庫限制,可以安全地假設我有正確數量的輸入。 (例如 3 行 3 個值,或 5 行 5 個值)並且即使假設不安全,我也不介意拋出錯誤,因為如果確實發生了錯誤,這將確保數據完整性......<br><br> 將哪些值分配給哪些行並不重要。<br><br> 這是我嘗試過的一些示例。</p><pre class="lang-sql prettyprint-override"> UPDATE table1 SET table1.column1 IN (17, 37, 62) WHERE table1.foreign_key = 877;</pre><p> 之后我發現你不能這樣使用 IN ......然后我嘗試了:</p><pre class="lang-sql prettyprint-override"> UPDATE table1 SET table1.column1 = (17, 37, 62) WHERE table1.primary_key IN (SELECT primary_key FROM table1 WHERE foreign_key = 877);</pre><p> 但是,“您不能在 FROM 子句中指定目標表 'table1' 進行更新”<br><br> 對於 SELECT 然后在(n_rows + 1 個查詢)之后進行更新(如下所示),這將是相當微不足道的,所以我假設可以在一個查詢中完成。</p><pre class="lang-sql prettyprint-override"> SELECT primary_key from table1 where foreign_key =?;,[877]</pre><p> 然后映射值和主鍵(我使用的是nodejs后端)</p><pre class="lang-sql prettyprint-override"> UPDATE table1 set column1 =? where primary_key =?;,[value1,primary_key1]</pre><p> 困難的部分似乎是</p><ol><li>如何將 map 多個值添加到多行。</li><li> 如何在運行時獲取每一行的唯一 ID。<br></li></ol><p> 我不介意是否必須使用存儲過程,我只是真的不想向數據庫發送 n+1 個查詢。</p></div>.`外鍵`<table> </table> 從具有外鍵列的一張表中選擇? SQL Server從表中選擇主鍵在另一個表中不顯示為外鍵的表 用外鍵從表中刪除 根據其他表的條件選擇對表的查詢? 無外鍵 表 A 或表 B 的外鍵 第一個表中的外鍵 用外鍵創建表 在外鍵表上排序
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM